在Android上的会话中写入然后从文件中读取ArrayList <object>?

时间:2016-03-01 17:05:58

标签: java android arraylist serializable

嗨我试图在调用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();
    }

&#34; FILENAME&#34;是一个包含字符串&#34; data.txt&#34;的变量。 toDos是arrayList的名称,它是Activity顶部的一个字段,它是Objectizable的一个ArrayList,它是Serializable。

不确定我在这里做错了什么,我无法判断它的写作是否完全或问题可能出在何处。

1 个答案:

答案 0 :(得分:0)

您正在获取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;
}

此代码完成相同的操作,但只能从文件中读取一次。