問題:オブジェクト (1000 の連絡先) の巨大なマップを SharedPreferences に保存したいと考えています。
初めてすべての連絡先を読み込み、すべての写真をbase64文字列に変換するCordovaアプリケーションがあります。
通常、このプロセスには約 30 秒かかります。そのため、すべての連絡先を String として 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)
これは、マップを変換する方法ですが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
ますか?