从内部存储读取(反序列化)

时间:2014-01-16 16:55:28

标签: java android android-listview arraylist

我使用以下方法从内部存储中读取:

private void deserialize(ArrayList<Alias>arrayList) {
    try {
        FileInputStream fis = openFileInput(filename);
        ObjectInputStream ois = new ObjectInputStream(fis);
        arrayList = (ArrayList<Alias>)ois.readObject();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

它将文件“filename”的内容读取到“arrayList”。

“序列化”方法如下:

void serialize(ArrayList<Alias>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();
    }
}

问题在于,每当我再次运行程序时,“arrayList”为空。所以我想我是在错误的输入模式下打开文件。

我的目标是首先从文件中获取数组,然后在应用程序中修改它,然后将修改后的数组写回文件。

有人可以帮我解决我的问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以发布你的源代码吗?我认为你用来解析文件内容的方式会出问题。

答案 1 :(得分:0)

请阅读:

Android ObjectInputStream docs

我读到方法readObject()读取下一个对象...这个你必须用这样的东西迭代:

MediaLibrary obj = null;
while ((obj = (MediaLibrary)objIn.readObject()) != null) {
    libraryFromDisk.add(obj);
}