it-swarm.com.de

Android Picasso-Bild wird nicht geladen

Es gibt zwei Situationen, in denen ich Bilder lädt, erstens direkt aus dem Internet, und zweitens Bilder laden, die auf das Gerät heruntergeladen werden. Und wann immer ich lade, werden 8 bis 9 von 10 Bildern angezeigt und 1-2 fehlen. Ich sehe, dass die Dekodierung falsch war und google'd so hart ich konnte, konnte aber nicht auftauchen. 

  1. WAIT_FOR_CONCURRENT_GC blockiert 22ms
  2. WAIT_FOR_CONCURRENT_GC blockiert 20 ms
  3. GC_FOR_ALLOC befreit 718K, 31% frei 9948K/14256K, pausierten 49 ms, insgesamt 51 ms
  4. D/skia: --- decoder-> decode lieferte falseGC_CONCURRENT freigegeben 1370 K, 30% frei 10081 K/14256 K, pausierte 3 ms + 2 ms, gesamt 33 ms
  5. GC_FOR_ALLOC befreit 916 K, 30% frei 10029 K/14256 K, pausierte 66 ms, insgesamt 67 ms

Hier ist der Code, den ich zum Laden durch Picasso verwende:

        Picasso.with(activity)
            .load(path)
            .placeholder(R.drawable.thumbnail_placeholder)
            .resize(width,height)
            .into(imageView);

Irgendwelche Ideen, wie man dieses Problem lösen kann? Ich rufe jedes Mal fit ()/resize () an, wenn die Bilder auf dem Bildschirm geladen werden. Vielen Dank im Voraus!

Zu Ihrer Information, ich teste auf beiden Maschinen, dem Emulator und dem realen Gerät, Samsung Galaxy Tab 3, und funktioniert ohne Probleme mit dem Emulator, aber Probleme treten auf dem realen Gerät auf.

AKTUALISIEREN:

Dies wurde durch den Farbraum des Bildes verursacht, bei dem Bilder, die nicht angezeigt wurden, im YMCK-Farbraum waren. 

7
xosuma

Sie können Picasso-Protokolle mit Picasso.with(Context).setLoggingEnabled(true) aktivieren. Dort wird wahrscheinlich eine Fehlermeldung mit einem Grund angezeigt.

Es lohnt sich auch, die von Ihnen verwendete URL zu protokollieren und einen Browser auszuprobieren, nur für den Fall.

22
Matthew Shearer

Überprüfen Sie die Internet-Berechtigung in vielfältiger Weise

<uses-permission Android:name="Android.permission.INTERNET"/>
10
Tarun Umath

In Picasso sollten Sie url in der .load()-Methode übergeben, um ein Bild aus dem Internet zu laden, und ein Objekt vom Typ File, um ein Bild aus dem Gerätespeicher zu laden.

Wenn das Bild also auf dem Gerät gespeichert ist, laden Sie es wie folgt:

        Picasso.with(activity)
                .load(new File(path))
                .placeholder(R.drawable.thumbnail_placeholder)
                .resize(width,height)
                .into(imageView);

Und mit diesem Code können Sie Bilder aus dem Internet laden:

        Picasso.with(activity)
                .load(path)
                .placeholder(R.drawable.thumbnail_placeholder)
                .resize(width,height)
                .into(imageView);
5
dzikovskyy

Ich weiß nicht, ob es für dieses Problem relevant ist oder nicht, aber mein Problem wird durch die Verwendung von Glide anstelle von Picasso gelöst.

2
Gentle

Ich hatte den gleichen Fehler, habe die Größe des gleichen Bildes geändert und es in die Firebase hochgeladen. Dann habe ich seine URL mit Picasso geladen und diesmal hat es einwandfrei funktioniert. Bild wurde erfolgreich geladen.

Das gleiche Bild wurde nicht angezeigt, und es gab keine Picasso-Protokolle, bevor die Größe geändert wurde.

Es dauerte fast zwei Tage, bis mir klar wurde, dass das eigentliche Problem in der Bildgröße lag. Ich habe die Größe meines Bildes auf 500x500 geändert und alles hat gut funktioniert.

HINWEIS: In meinem Fall habe ich ein Bild von der Kamera des Geräts aufgenommen, es in den Firestore hochgeladen und dann mit Picasso geladen. Um das Problem zu beheben, begann ich, die Größe des Bildes in der onActivityResult() -Methode zu ändern, speichere das Bild in der Größe im lokalen Speicher und lade es in den Firestore hoch.

1
Ahmad Sadiq

Werfen Sie einen Blick auf Picasso: aus der Erinnerung

Überprüfen Sie, ob Sie eine feste Größe in Ihrer ImageView verwenden. Weitere Informationen finden Sie unter @Samuil Yanovski answer

Hoffe das hilft!!

1

Wenn etwas nicht funktioniert, liegt dies an einem Problem mit den Servern, auf denen Bilder gehostet werden. Ihre URL führt Sie nicht direkt zum Bild, aber im Backend funktioniert etwas anderes. Möglicherweise wird es in Chrome oder einem anderen Browser geöffnet In Picasso wird es sicher geladen, Sie können also diesen Code ausprobieren: 

final OkHttpClient client = new OkHttpClient.Builder()
        .protocols(Collections.singletonList(Protocol.HTTP_1_1))
        .build();

final Picasso picasso = new Picasso.Builder(this)
        .downloader(new OkHttp3Downloader(client))
        .build();

Picasso.setSingletonInstance(picasso);

wo die OkHttp3Downloader-Instanz von dieser Bibliothek bereitgestellt wird . https://github.com/JakeWharton/picasso2-okhttp3-downloader

0
Shreyansh jain