android如何将对象保存到文件?

时间:2010-09-02 08:49:20

标签: android file object save

有人知道如何将对象保存并恢复到android上的文件吗?

4 个答案:

答案 0 :(得分:11)

使用openFileOutput()(http://developer.android.com/guide/topics/data/data-storage.html#filesInternal)打开文件,而不是使用ObjectOutputStream(http://download.oracle.com/javase/1.4.2/docs/api/java/io/ObjectOutputStream.html)将对象写入文件。

使用他们邪恶的双胞胎openFileInput()和ObjectInputStream()来反转这个过程。

答案 1 :(得分:3)

这取决于您是否要在内部或外部媒体上保存文件。对于这两种情况,Android DEV网站上都有很好的示例:http://developer.android.com/guide/topics/data/data-storage.html - 这应该是明智的帮助

答案 2 :(得分:1)

请参阅此处获取代码示例:android how to save a bitmap - buggy code

答案 3 :(得分:0)

以下是@ yayay建议的测试示例。请注意,使用readObject()会返回Object,因此您需要进行强制转换,尽管编译器会抱怨它是未经检查的强制转换。我仍然可以运行我的代码。您可以阅读有关投射问题here的更多信息。

请确保您的课程(在我的情况下,ListItemsModel)是可序列化的,因为writeObject()会序列化您的对象,而readObject()会反序列化它。如果不是(你没有持久性并且logcat抛出NotSerializableException),那么确保你的类实现java.io.Serializable,你就可以了。注意,此接口中不需要实现任何方法。如果您的课程无法实施Serializable并且工作(例如第三方图书馆课程),this link会帮助您序列化您的对象。

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();
        }
}