0

每当我按下后退按钮时,我的应用程序都不会调用onSaveInstanceState(),也无法保存数据。我正在尝试制作一个调度程序应用程序,即使按下后退按钮,我也需要保存已经设置的时间表。我想通过将源文件中的新数据添加到 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();


}
4

2 回答 2

2

这是 android 开发者网站上的数据存储选项指南,它应该告诉您您需要知道的一切:http: //developer.android.com/guide/topics/data/data-storage.html

于 2012-09-30T23:14:17.560 回答
2

据我所知,您的保存代码没有任何问题。没有被调用的原因onSaveInstanceState是因为在这种情况下它是错误的工作工具。只有当一个 Activity 被系统杀死以将其带回来时,才会调用该方法。来自 Android 文档:

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

使用后退按钮离开 Activity 是上述场景的一个示例 - Activity 正在被销毁,因此不需要保存状态以供以后恢复。onSaveInstanceState更多地是为小的 UI 事物而设计的,例如哪些复选框在其中进行了检查,或者在字段中输入的文本 - 而不是持久数据存储。您应该考虑将保存调用放入onPause(如果它很快的话)onStop、 或onDestroy.

于 2012-09-30T23:15:37.123 回答