如何在本地存储android中保存arraylist< custom object>?

thtygnil  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(437)

我有一个应用程序,可以获取uri和图像的名称并返回 arrayList 属于 ArrayList<ImageModel> . 其中图像模型包括 uriname 两个变量和 GetterSetter 每个人。

try {
            FileOutputStream outputStreamWriter = getContext().openFileOutput("config.txt", Context.MODE_PRIVATE);
            ObjectOutputStream oos = new ObjectOutputStream(outputStreamWriter);
            oos.writeObject(arrayList);
            oos.close();
            outputStreamWriter.close();
        } catch (IOException e) {
            Log.e("Exception", "File write failed: " + e.toString());
        }

当我试图拯救时 arrayList 使用上面的方法它抛出 java.io.NotSerializableException: android.net.Uri$HierarchicalUri 例外。但是,我的 ImageModel 工具 Serializable .

try {
            FileInputStream fis = getContext().openFileInput("config.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Object object = ois.readObject();
            return object;
        } catch (Exception ex) {
            return null;
        }

因为文件未被写入,所以此读取方法将返回null。所以,我需要合适的解决方案来保存它 arrayList 到本地存储并检索它。此外,我将通过uri加载图像 arrayList.get() 方法。所以,我想 ArrayList 这是必须的。

nr9pn0ug

nr9pn0ug1#

您不能直接将对象保存到存储器中,必须将它们序列化,然后将这些序列化数据存储到存储器中。您必须读取序列化的数据,然后将其反序列化以获取对象。更多关于序列化的信息
在代码中, oos.writeObject() 要求传递的对象必须是可序列化的,但您的imagemodel不是因为具有uri类型的成员。
可能的解决方法:将imagemodel类修改为可序列化。并保持存储读/写逻辑不变。
imagemodel类

public class ImageModel implements Serializable {
    private String uriString;
    private String name;

    public ImageModel(Uri uri, String name) {
        this.uriString = uri.toString();
        this.name = name;
    }

    public Uri getUri() {
        return Uri.parse(uriString);
    }

    public String getName() {
        return name;
    }

    public void setUri(Uri uri) {
        this.uriString = uri.toString();
    }

    public void setName(String name) {
        this.name = name;
    }
}

还有其他序列化选项(即json),您也可以使用它们。

相关问题