Android如何将一个对象保存到文件中?

8
有人知道如何在Android上将对象保存并恢复到文件中吗?
3个回答

11

3

我想将它保存到内部。我现在正在观察ObjectOutputStream,它看起来很有趣,但不知道为什么,无法让“fos = openFileOutput(filename, Context.MODE_PRIVATE);”工作,它不接受我的String文件名参数...这是怎么回事??? - Fabien
我发现这是一个上下文的问题。 - Fabien

1
这是一个经过测试的@yayay建议的示例。请注意,使用readObject()返回一个Object,因此您需要进行强制转换,尽管编译器会抱怨它是未经检查的转换。但我仍然可以正常运行我的代码。您可以在此处阅读更多关于类型转换问题的内容。
请确保您的类(在我的情况下是ListItemsModel)是可序列化的,因为writeObject()将对您的对象进行序列化,而readObject()将对其进行反序列化。如果它不是(您将无法持久化并且logcat会抛出NotSerializableException),则请确保您的类实现了java.io.Serializable,然后您就可以开始了。请注意,此接口中不需要实现任何方法。如果您的类无法实现Serializable并正常工作(例如第三方库类),此链接将帮助您对对象进行序列化。
private void readItems() {

        FileInputStream fis = null;
        try {
            fis = openFileInput("groceries");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            ObjectInputStream ois = new ObjectInputStream(fis);
            ArrayList<ListItemsModel> list = (ArrayList<ListItemsModel>) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
}

private void writeItems() {

        FileOutputStream fos = null;
        try {
            fos = openFileOutput("groceries", Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(itemsList);
        } catch (IOException e) {
            e.printStackTrace();
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接