2015-03-25 2 views
6

Ich lade Bild in Bild-Ansicht von JSon. JSon nur den Pfad der Bild-URL. Ich setze den Wert mit Picasso. Aber es gibt Fehler für einige Bild und für die Erholung ist adaequatOutOfMemoryError auswerfen "Konnte eine 31961100 Byte-Zuweisung nicht mit 4194304 freien Bytes und 27MB zuweisen, bis OOM

Picasso.with(context).load(rowItem.getProductImages().get(0)).into(holder.productImageView); 

Fehler ist:.

2771-2793/com.koove E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 31961100 byte allocation with 4194304 free bytes and 27MB until OOM" 
03-25 09:53:23.666 2771-2793/com.koove D/skia﹕ --- decoder->decode returned false 
+1

Sie müssen die Bilder im Hintergrund herunterladen, dann die Größe ändern (oder eine Kopie davon erstellen) auf die Bildschirmgröße/Präsentationsgröße (wieder im Hintergrund) und dann anzeigen. – Tigger

+2

mögliches Duplikat von [Wie lade ich große Bilder in Android und vermeide den Speichermangel?] (Http://stackoverflow.com/questions/21392972/how-to-load-large-images-in-android-and- Ausweich-der-aus-Speicher-Fehler) – Tigger

Antwort

4

Sie sollten das Verfahren fit() in Picasso verwenden, ist es, die Abmessungen des Zielimagemess und intern verwendet resize(), um die Bildgröße auf die Dimensionen des zu reduzieren Bildansicht.

Der Vorteil ist, dass das Bild die niedrigste mögliche Auflösung hat, ohne seine Qualität zu beeinträchtigen. Eine niedrigere Auflösung bedeutet, dass weniger Daten im Cache gespeichert werden müssen.

Picasso.with(context).load(rowItem.getProductImages().get(0)).fit().into(holder.productImageView); 

Wenn Sie immer noch die OOM haben, entfernen Sie den Cache mit der Speicherrichtlinie.

+0

Große Antwort. Fit() funktioniert wirklich für mich. Will nur wissen, kann ich memoryPolicy() Bedingung auf If (fit() == false) Bedingung behandeln? – VVB

+0

Ich glaube nicht, die Methode fit() gibt ein RequestCreator-Objekt zurück. Da die Verwendung von fit() die Bildanforderung verzögern kann, können Sie stattdessen die resize() - und onlyScaleDown() -Methoden verwenden. Das Bild wird dann nur dann skaliert, wenn es größer ist als die Größenanpassungsparameter. Hier ein guter Link für Picasso-Nutzungs-Methoden https://futurestud.io/blog/picasso-image-resizing-scaling-and-fit – Lilo

+0

Okay. Danke, dass Sie wertvolle Eingaben hinzugefügt haben. Es wäre großartig, wenn Sie nur den Grund nennen könnten, warum diese Frage auftaucht? in einer Zeile. – VVB

Verwandte Themen