每当我按下后退按钮时,我的应用程序都不会调用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();
}
答案 0 :(得分:1)
以下是Android开发者网站上数据存储选项的指南,它应该告诉您需要知道的所有内容:http://developer.android.com/guide/topics/data/data-storage.html
答案 1 :(得分:1)
据我所知,您的保存代码没有任何问题。 onSaveInstanceState
未被调用的原因是因为在这种情况下它是错误的工具。只有当一个Activity被系统杀死并意图将其恢复时,才会调用该方法。来自Android文档:
调用onPause()和onStop()时的一个示例,而不是此方法是当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例将永远不会被恢复,所以系统避免调用它。
使用后退按钮导航离开Activity是上述场景的一个示例 - Activity正在被销毁,因此不需要保存状态以便以后恢复。 onSaveInstanceState
更适用于小型UI事物,例如复选框中有复选框,或者在字段中输入的文本 - 而不是持久数据存储。您应该考虑将保存调用放入onPause
(如果很快),onStop
或onDestroy
。