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

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

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

  1. try {
  2. FileOutputStream outputStreamWriter = getContext().openFileOutput("config.txt", Context.MODE_PRIVATE);
  3. ObjectOutputStream oos = new ObjectOutputStream(outputStreamWriter);
  4. oos.writeObject(arrayList);
  5. oos.close();
  6. outputStreamWriter.close();
  7. } catch (IOException e) {
  8. Log.e("Exception", "File write failed: " + e.toString());
  9. }

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

  1. try {
  2. FileInputStream fis = getContext().openFileInput("config.txt");
  3. ObjectInputStream ois = new ObjectInputStream(fis);
  4. Object object = ois.readObject();
  5. return object;
  6. } catch (Exception ex) {
  7. return null;
  8. }

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

nr9pn0ug

nr9pn0ug1#

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

  1. public class ImageModel implements Serializable {
  2. private String uriString;
  3. private String name;
  4. public ImageModel(Uri uri, String name) {
  5. this.uriString = uri.toString();
  6. this.name = name;
  7. }
  8. public Uri getUri() {
  9. return Uri.parse(uriString);
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setUri(Uri uri) {
  15. this.uriString = uri.toString();
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }

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

展开查看全部

相关问题