我需要保存一组复杂的preferences
,本质上HashMap
包含 other 的数组hashmaps
作为其键的值。
我怎样才能将其保存到preferences
,或者我应该preferences
以其他方式保存吗?我应该为首选项创建一个对象并将其序列化为文件吗?如果是这样,请问如何做到这一点?
我需要保存一组复杂的preferences
,本质上HashMap
包含 other 的数组hashmaps
作为其键的值。
我怎样才能将其保存到preferences
,或者我应该preferences
以其他方式保存吗?我应该为首选项创建一个对象并将其序列化为文件吗?如果是这样,请问如何做到这一点?
您可以使用 Paper,它是一个快速的 NoSQL 数据库。易于在其中创建和存储数据。链接在这里。 https://github.com/pilgr/Paper
SharedPreferences仅将原始值存储在键/值对中。因此,我认为这不是存储 a HashMap
of Array
s of HashMap
s 的最佳方式——除非数据可以以有意义的方式展平(如果您使用的HashMap
s 数量确实键值对是否无法将该数据存储为常规键值对?)。
如果数据结构真的那么复杂,您需要研究其他存储选项。根据长度,我可能只使用SQLite
数据库。它易于设置,可以在您的应用程序中的任何位置访问,像存储的首选项一样持久且快速。
我已经忘记了这一点,但我想我会在这么久之后发布一个答案。我一般使用序列化来存储这样的项目如下。
public void serializeObject(Object object, String filename) {
try {
File file = new File(context.getFilesDir(), filename);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(object);
oos.flush();
oos.close();
}
catch (IOException e) {e.printStackTrace();}
}
File file = new File(context.getFilesDir(), Filename);
if (file.exists()) map = (LinkedHashMap) loadSerialisedClassFile(file);
public Object loadSerialisedClassFile(File file) {
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
Object object = ois.readObject();
return object;
}
catch(Exception ex) {
ex.printStackTrace();
}
return null;
}
您可以使用 Gson 库
Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。
通过使用 Gson,您可以将您的类结构转换为 json 格式,然后将其作为字符串格式存储到共享首选项中,当您想要恢复该类结构时,您可以再次使用 gson,gson 会将您的 json 格式再次转换为 java 对象。
更多检查 Gson。
如果你有一个复杂的数据结构,并且你想将它存储在共享首选项中,那么你可以考虑为你的对象创建一个 to_json() 方法。然后当然是 from_json(String json) 方法。