序列化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之间振荡。
- Android RenderScript FinalizerWatchdogDaemon致命exception
- 在Android中实现类似Spring的包扫描
- 设备旋转时丢失’MediaPlayer’(和其他变量)
- 获取ListItem中的信息并将其发送到下一个Activity
- android – 将广播发送到MainActivity,然后显示TextView
- Android从另一个类更改TextView文本
- 单击按钮时,如何将Paypal集成到付款用户?
- java.lang.IllegalArgumentException:可能无法回收废弃或附加的视图。 isScrap:false isAttached:true
- 在android中使用liblame将pcm文件转换为mp3