序列化ArrayList

我正在尝试编写一款Android游戏,即使用户想要返回主菜单或活动被系统杀死,我也希望能够暂停游戏。 onSaveInstanceState似乎并没有给我一个很大的控制权,我什么时候可以读回包,再加上我能说的,这个包只能在很短的时间内使用。 所以我想序列化一些我拥有的ArrayLists,然后再读回来。 我没有得到任何编译错误,也没有程序崩溃。 但是,数据要么永远不会被写入,要么永远不会被读取。 我不确定是哪一个。 我在onDestroy中调用了serializeData方法,并从onCreate调用了deserializeData。 这是我编写和读取数据的代码:

public void serializeData(String filename, ArrayListarrayList) { 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, ArrayListarrayList){ try{ FileInputStream fis = openFileInput(filename); ObjectInputStream ois = new ObjectInputStream(fis); arrayList = (ArrayList)ois.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } } 

任何帮助将不胜感激! 提前致谢!

让我告诉你一件事:永远不要使用onDestroy()方法来保存你的数据。 请改用onPause()或onStop()。 您永远不应该依赖onDestroy()方法来保存数据或调用某些函数。

使用onDestroy关闭连接并完成使用资源等。 如果您想了解更多相关信息,请查看此处。

除此之外你的代码似乎很好。 再添加一件事:在oos.close()上面放一个oos.flush()。

并且不要忘记关闭objectInputStream对象。

谢谢。

我看不出该代码存在明显问题。

我会在关闭ObjectOutputStream之后和打开ObjectInputStream之前尝试添加一些代码,以打印出文件的绝对名称和大小。

在序列化时,您可以写入ByteArrayOutputStream,然后使用平台的默认字符集将字节解码为字符串。 将此字符串存储到SharedPreferences中。 在反序列化时,只需从字符串中获取字节并使用它创建一个ByteArrayInputStream并将其提供给ObjectInputStream。
你确定你的活动被杀了吗? 可能是您的活动在onPasue / onResume之间振荡。