如何永久保存数据,以便以后在Android中访问?

如何永久保存数据,以便以后在Android中访问?,android,file,save,storage,Android,File,Save,Storage,每当我按下后退按钮时,我的应用程序都不会调用saveInstanceState(),也无法保存数据。我正在尝试制作一个调度程序应用程序,我需要保存已设置的调度,即使在按下“后退”按钮后也是如此。我想通过将源文件中的新数据添加到stringArray来动态编辑ListView。我遇到的问题是文件schedules.txt没有保存。每当程序打开一个新活动时,该文件现在为空 这是我目前掌握的代码: public void onCreate(Bundle savedInstanceState) {

每当我按下后退按钮时,我的应用程序都不会调用saveInstanceState(),也无法保存数据。我正在尝试制作一个调度程序应用程序,我需要保存已设置的调度,即使在按下“后退”按钮后也是如此。我想通过将源文件中的新数据添加到stringArray来动态编辑ListView。我遇到的问题是文件schedules.txt没有保存。每当程序打开一个新活动时,该文件现在为空

这是我目前掌握的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_schedules);
    ListView listview = (ListView) findViewById(R.id.scheduleListView);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, schedulesList); 
    listview.setAdapter(adapter);
    Log.v("myapp", "currentlist of files associated with this program are: " + fileList());

    try {

        FileOutputStream fout = openFileOutput("schedules.txt", MODE_PRIVATE);
        Log.v("myapp", "FileOutputStream ran");

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

try {
       Log.v("myapp", "first get old schedules call");
       getOldSchedules();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}


public void editFile(String format) throws IOException {

    Log.v("myapp", "editFile ran");
    FileOutputStream fout = openFileOutput("schedules.txt", MODE_PRIVATE);
    OutputStreamWriter writer = new OutputStreamWriter(fout);

    writer.write("hello alex");
    writer.flush();
    writer.close();
    Log.v("myapp", "secondary getoldschedules call");
    getOldSchedules();
}

public void getOldSchedules() throws IOException{

    FileInputStream fis = openFileInput("schedules.txt");
    InputStreamReader reader = new InputStreamReader(fis);

    char[] inputbuffer = new char[32];
    reader.read(inputbuffer);
    String data = new String(inputbuffer);
    Log.v("myapp", "data in file reads: " + data);

    reader.close();


}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedules);
ListView ListView=(ListView)findViewById(R.id.scheduleListView);
adapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,schedulesList);
setAdapter(适配器);
Log.v(“myapp”,“与此程序关联的当前文件列表为:“+fileList()”);
试一试{
FileOutputStream fout=openFileOutput(“schedules.txt”,MODE_PRIVATE);
Log.v(“myapp”、“FileOutputStream运行”);
}捕获(FileNotFoundException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
试一试{
Log.v(“myapp”,“首次获取旧计划呼叫”);
getOldSchedules();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
公共void editFile(字符串格式)引发IOException{
Log.v(“myapp”、“editFile run”);
FileOutputStream fout=openFileOutput(“schedules.txt”,MODE_PRIVATE);
OutputStreamWriter writer=新的OutputStreamWriter(fout);
写(“你好,亚历克斯”);
writer.flush();
writer.close();
Log.v(“myapp”、“第二次getoldschedules调用”);
getOldSchedules();
}
public void getOldSchedules()引发IOException{
FileInputStream fis=openFileInput(“schedules.txt”);
InputStreamReader=新的InputStreamReader(fis);
char[]inputbuffer=新字符[32];
reader.read(输入缓冲区);
字符串数据=新字符串(inputbuffer);
Log.v(“myapp”,“文件中的数据读取:”+数据);
reader.close();
}

这是android开发者网站上的数据存储选项指南,它应该告诉你需要知道的一切:

这是android开发者网站上的数据存储选项指南,它应该告诉你需要知道的一切:

据我所知,你的保存代码没有什么问题ason
onSaveInstanceState
未被调用,是因为在这种情况下,它是作业的错误工具。只有当系统出于将其恢复的目的而终止某个活动时,才会调用该方法。来自Android文档:

调用onPause()和onStop()而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例永远不会被还原,因此系统避免调用它


使用“上一步”按钮导航离开活动是上述场景的一个示例-活动正在被销毁,因此不需要保存状态以供以后恢复。
onSaveInstanceState
更多地用于小UI内容,例如哪些复选框中有复选框,或字段中输入的文本-不持久数据存储。您应该考虑将保存调用放入 OnPosip(如果它很快),
onStop
,或
onDestroy
据我所知,您的保存代码没有立即出错。没有调用
onSaveInstanceState
的原因是,在这种情况下,它是作业的错误工具。只有当系统出于brin的目的而终止某个活动时,才会调用该方法从Android文档中可以看到:

调用onPause()和onStop()而不是此方法的一个示例是当用户从活动B导航回活动a时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例永远不会被还原,因此系统避免调用它


使用“上一步”按钮导航离开活动是上述场景的一个示例-活动正在被销毁,因此不需要保存状态以供以后恢复。
onSaveInstanceState
更多地用于小UI内容,例如哪些复选框中有复选框,或字段中输入的文本-不持久数据存储。您应该考虑将保存调用放入OpPosip>(如果它很快),<代码> OnSturt,或者<代码> OnDebug

您可能对使用SQLite感兴趣。尼斯教程:您可能对使用SQLite感兴趣。