Проблема: я хочу сохранить огромную карту объектов (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)
Это мой метод, когда я конвертирую свою карту в 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();
}
Есть ли другой способ сохранить карту в SharedPreferences или я могу как-то сохранить OutputStream
?
OutOfMemoryError
. Поэтому я использовалJsonWriter
. но все же получите то же исключение при попытке получить строку изByteArrayOutputStream
. Спасибо, - person snaggs   schedule 22.09.2014