在 Android 上跨会话从文件中写入然后读取 ArrayList<Object>?
Posted
技术标签:
【中文标题】在 Android 上跨会话从文件中写入然后读取 ArrayList<Object>?【英文标题】:Write and then read ArrayList<Object> from file across sessions on Android? 【发布时间】:2016-06-14 05:31:38 【问题描述】:您好,我试图在调用 onPause() 和/或 onStop() 时将对象的 ArrayList 保存到文件中,然后在应用程序被终止并重新启动后从该文件中读取 arrayList。我尝试了很多不同的方法,但似乎都没有奏效,目前这就是我所拥有的。
我要写的代码:
try
FileOutputStream fout = openFileOutput(FILENAME, 0);
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(toDos);
oos.close();
catch (Exception e)
e.printStackTrace();
我要阅读的代码:
try
FileInputStream streamIn = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(streamIn);
if(ois.readObject() != null)
list = (ArrayList<Object>) ois.readObject();
ois.close();
catch (Exception e)
e.printStackTrace();
“FILENAME”是一个保存字符串“data.txt”的变量 toDos是arrayList的名称,是Activity顶部的一个字段,是一个可序列化的object Object的ArrayList。
不知道我在这里做错了什么,我不知道它的写作是否或问题可能出在哪里。
【问题讨论】:
你遇到了什么错误? @Thomas None 它只是没有按要求做。除非我尝试使用 File x = new File(this.getFileDirs(),FILENAME) 否则我会得到一个空指针异常。 使用catch语句捕获一般异常被认为是一种不好的做法,请分别为FileNotFoundException、IOException和ClassNotFoundException编写catch语句,然后查看try块捕获的是哪种类型的异常。 @Thomas 我正在修改它,结果它在尝试读取文件时抛出 EOFException,写入文件部分似乎没有返回错误。 【参考方案1】:你得到一个 EOFException 因为你正在读取对象 两次;一次是在检查 if 语句时,再一次是在 if 语句中。把你的代码改成这样:
FileInputStream streamIn = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(streamIn);
ToDoObject tmp = (ArrayList<ToDoObject>) ois.readObject();
ois.close();
if(tmp != null)
toDos = tmp;
这段代码完成了同样的事情,但从文件中读取一次。
【讨论】:
谢谢,我不再收到任何错误,但它仍然无法正常工作。真的不知道为什么它现在不起作用。 这些代码段在您的活动类中调用到哪里?请从主要活动中发布更多代码。 别管它现在工作了,你的建议确实解决了读/写的问题,我只是用其他代码打破了它,修复了它,现在一切正常,谢谢你的帮助。以上是关于在 Android 上跨会话从文件中写入然后读取 ArrayList<Object>?的主要内容,如果未能解决你的问题,请参考以下文章