问题:我想将巨大的对象映射(1000 个联系人)存储到 SharedPreferences 中。
我有 Cordova 应用程序,其中第一次加载所有联系人并将所有照片转换为 base64 字符串。
通常,此过程可能需要大约 30 秒。出于这个原因,我的目标是将所有联系人作为字符串存储到 SharedPreferences 以便快速加载。
我使用 GSON 库,但无论我做什么,我都会得到:
java.lang.OutOfMemoryError
at java.lang.String.<init>(String.java:354)
at java.lang.String.<init>(String.java:171)
at java.io.ByteArrayOutputStream.toString(ByteArrayOutputStream.java:137)
这是我将 Map 转换为ByteArrayOutputStream
但在最后一行获得异常的方法:out.toString()
public static String getStrFromGroupsListJSONObject(ConcurrentHashMap<String, WmContactImage> contactMap){
Gson gson = getInstance();
OutputStream out = new ByteArrayOutputStream();
try {
JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
Iterator<String> it = contactMap.keySet().iterator();
WmContactImage img;
writer.beginObject(); // {
while(it.hasNext()){
String key = it.next();
writer.name(key);
img = contactMap.get(key);
gson.toJson(img, WmContactImage.class, writer);
}
writer.endObject(); // }
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return out.toString();
}
有没有其他方法可以将 Map 存储在 SharedPreferences 中,或者我可以以某种方式存储OutputStream
?