web-dev-qa-db-ja.com

Android Picasso Imageは読み込まれません

画像を読み込むには、インターネットから直接直接読み込む画像と、デバイスにダウンロードした画像を読み込む画像の2つの状況があります。そして、ロードするたびに、10枚の画像のうち8枚から9枚が表示され、1-2枚が欠落しています。デコードでfalseが返されたことがわかり、できる限りグーグルで検索されましたが、表示されませんでした。

  1. WAIT_FOR_CONCURRENT_GCは22msをブロックしました
  2. WAIT_FOR_CONCURRENT_GCは20ミリ秒ブロックしました
  3. GC_FOR_ALLOCは718Kを解放し、31%が9948K/14256Kを解放し、一時停止49ミリ秒、合計51ミリ秒
  4. D/skia:---デコーダー->デコードはfalseを返しました
  5. GC_FOR_ALLOCは916Kを解放し、30%が10029K/14256Kを解放し、66msで一時停止し、合計で67ms

Picassoを介して読み込むために使用するコードは次のとおりです。

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

この問題を解決する方法はありますか?画面に読み込む画像を取得するたびにfit()/ resize()を呼び出しています。よろしくお願いします、前もって感謝します!

参考までに、エミュレータと実デバイスの両方のマシン、Samsung Galaxy Tab 3でテストし、エミュレータで問題なく動作しますが、実デバイスで問題が発生します。

更新:

これは、画像の色空間が原因で、表示されていない画像がYMCK色空間にある画像でした。

9
xosuma

Picasso.with(Context).setLoggingEnabled(true)を使用してPicassoログを有効にできます。おそらく、エラーメッセージとその理由が表示されます。

念のため、使用しているURLをログに記録し、ブラウザで試してみる価値もあります。

25
Matthew Shearer

マニフェストでインターネットの許可を確認する

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

Picassoでは、インターネットから画像を読み込む.load()メソッドでurlを渡し、デバイスストレージから画像を読み込むFileタイプのオブジェクトを渡す必要があります。

したがって、画像がデバイスに保存されている場合は、次のようにロードします。

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

そして、このコードを使用してインターネットから画像をロードします。

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

この問題に関連するかどうかわからないが、私の問題はピカソの代わりにグライドを使用して解決されます。

6
Gentle

うまくいかない場合は、画像をホストしているサーバーに何らかの問題があるため、URLは画像に直接移動しませんが、バックエンドでは他の何かが機能しているため、chromeまたは他のブラウザ、ただしピカソでは確実にロードされないため、次のコードを試してください。

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);

okHttp3Downloaderインスタンスはこのライブラリによって提供されます。 https://github.com/JakeWharton/picasso2-okhttp3-downloader

2
Shreyansh jain

私は同じエラーに直面していました。同じ画像のサイズを変更し、firebaseにアップロードしてから、picassoを使用してURLをロードしましたが、今回はまったく問題なく動作しました。イメージが正常にロードされました。

サイズ変更される前に、同じ画像が表示されず、ピカソのログもありませんでした。

本当の問題は画像サイズにあることを理解するのに2日近くかかりました。画像のサイズを500x500に変更しましたが、すべて正常に機能しました。

注:私の場合、デバイスのカメラから画像をキャプチャし、それをFirestoreにアップロードしてから、picassoを使用して画像をロードしていました。この問題を解決するために、onActivityResult()メソッドで画像のサイズを変更し、サイズ変更した画像をローカルストレージに保存し、Firestoreにアップロードし始めました。

1
Ahmad Sadiq

Picasso:out of memory を見てください

ImageViewで固定サイズを使用していることを確認し、詳細情報を参照してください @ Samuil Yanovski answer

お役に立てれば!!

1