【发布时间】:2011-07-08 14:26:28
【问题描述】:
我正在尝试编写一个 Android 游戏,并且我希望能够暂停游戏,即使用户想要返回主菜单或活动被系统终止。 onSaveInstanceState 似乎没有给我很大的控制权,让我知道何时可以读回包,而且据我所知,包只在短时间内有效。所以我想序列化我拥有的一些 ArrayList,然后将它们读回。我没有收到任何编译错误,程序也没有崩溃。但是,数据要么永远不会被写入,要么永远不会被读取。我不确定是哪一个。我的 serializeData 方法是在 onDestroy 中调用的,而 deserializeData 是从 onCreate 中调用的。这是我编写和读取数据的代码:
public void serializeData(String filename, ArrayList<String>arrayList) {
FileOutputStream fos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(arrayList);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private void deserializeData(String filename, ArrayList<String>arrayList){
try{
FileInputStream fis = openFileInput(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
arrayList = (ArrayList<String>)ois.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
任何帮助将不胜感激!提前致谢!
【问题讨论】:
-
虽然 savestate 不用于持久化,但 SharedPreference 足以保存 ArrayList of Objects。
-
我实际上想使用 SharedPreferences,但我认为您只能在其中存储原语。你怎么能在里面放一个 ArrayList?
-
代码看起来不错。你是如何确定这不是在写任何东西?
-
@ Jigar Joshi - org.life.java 我不确定它是不是在写还是不是在读。我认为问题在于阅读,因为它没有抛出任何 FileNotFoundExceptions 或任何东西。但我不知道。
-
但是为什么要使用共享首选项。如果他愿意,让他连载……我认为我们应该尝试解决问题。而不是通过使用共享首选项来忽略它......我建议不要从 onDestroy() 调用该函数,而是从 onPause 或 onStop() 调用它。
标签: java android serialization arraylist