如何在本地存储 android 中保存 arrayList<Custom Object>?
How to save arrayList<Custom Object> in local storage android?
我有一个应用程序可以获取图像的 uri 和名称以及 ArrayList<ImageModel>
的 returns arrayList
。其中图像模型包含 uri
和 name
两个变量,每个变量包含 Getter
和 Setter
。
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;
}
因为未写入文件,所以此读取方法 return 无效。所以,我需要合适的解决方案来将 arrayList
保存到本地存储并检索它。此外,我将通过 arrayList.get()
方法加载图像 uri。所以,我想 ArrayList
是必须的。
你不能直接将对象保存到存储中,你必须将它们序列化,然后将这个序列化数据存储到存储中。您必须读取序列化数据,然后反序列化它以取回您的对象。 More on serialization
在您的代码中,oos.writeObject()
要求传递的对象必须是可序列化的,但您的 ImageModel 不是因为具有 Uri 类型的成员。
可能的解决方法:将您的 ImageModel class 修改为可序列化。并保持您的存储 read/write 逻辑不变。
ImageModel class
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),您也可以使用它们。
我有一个应用程序可以获取图像的 uri 和名称以及 ArrayList<ImageModel>
的 returns arrayList
。其中图像模型包含 uri
和 name
两个变量,每个变量包含 Getter
和 Setter
。
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;
}
因为未写入文件,所以此读取方法 return 无效。所以,我需要合适的解决方案来将 arrayList
保存到本地存储并检索它。此外,我将通过 arrayList.get()
方法加载图像 uri。所以,我想 ArrayList
是必须的。
你不能直接将对象保存到存储中,你必须将它们序列化,然后将这个序列化数据存储到存储中。您必须读取序列化数据,然后反序列化它以取回您的对象。 More on serialization
在您的代码中,oos.writeObject()
要求传递的对象必须是可序列化的,但您的 ImageModel 不是因为具有 Uri 类型的成员。
可能的解决方法:将您的 ImageModel class 修改为可序列化。并保持您的存储 read/write 逻辑不变。
ImageModel class
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),您也可以使用它们。