B
Boris0815
Fortgeschrittenes Mitglied
- 4
Hallo,
ich habe eine App in der ich von einem Server Daten in Form von JSON bekomme. In manchen JSON-Objekten sind BASE64-codierte Bilder. Wenn ich nun versuche die empfangenen Daten in JSON umzuwandeln kann es zu einer "out of memory"-Exception führen, da der heap zu klein ist.

An dieser Stelle knallt es:
Wenn das empfange JSON zu groß ist, "verbraucht" der StringBuilder zu viel Speicher und die Exception kommt.
Ich habe nun schon einiges probiert und gelesen, bin aber noch nicht auf die richtige Lösung gestoßen.
Kennt ihr eine bessere Möglichkeit wie ich an mein JSON-Objekt komme, um auch leistungsschwächere Geräte zu unterstützen?
Die Daten die ich empfange kann ich erstmal nicht beeinflußen. Android 2.3.0 sollte mindest Version bleiben.
Ich dachte an etwas, wie die Strings zu stückeln und an anderer Stelle als im Speicher zusammen zu bauen.
Bin für jede Idee dankbar.
Gruß
Boris
ich habe eine App in der ich von einem Server Daten in Form von JSON bekomme. In manchen JSON-Objekten sind BASE64-codierte Bilder. Wenn ich nun versuche die empfangenen Daten in JSON umzuwandeln kann es zu einer "out of memory"-Exception führen, da der heap zu klein ist.
Dies passiert nur auf sehr wenigen Geräten, bzw. in einem Emulator mit klein konfiguriertem VMHeap. Aber ich möchte natürlich das es auf allen Geräten geht.E/dalvikvm-heap Out of memory on a 610302-byte allocation.
An dieser Stelle knallt es:
Code:
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line); // StringBuilder
}
reader.close();
JSONObject jsonObject = new JSONObject(builder.toString());
Ich habe nun schon einiges probiert und gelesen, bin aber noch nicht auf die richtige Lösung gestoßen.
Kennt ihr eine bessere Möglichkeit wie ich an mein JSON-Objekt komme, um auch leistungsschwächere Geräte zu unterstützen?
Die Daten die ich empfange kann ich erstmal nicht beeinflußen. Android 2.3.0 sollte mindest Version bleiben.
Ich dachte an etwas, wie die Strings zu stückeln und an anderer Stelle als im Speicher zusammen zu bauen.
Bin für jede Idee dankbar.
Gruß
Boris