画像を読み込むには、インターネットから直接直接読み込む画像と、デバイスにダウンロードした画像を読み込む画像の2つの状況があります。そして、ロードするたびに、10枚の画像のうち8枚から9枚が表示され、1-2枚が欠落しています。デコードでfalseが返されたことがわかり、できる限りグーグルで検索されましたが、表示されませんでした。
- WAIT_FOR_CONCURRENT_GCは22msをブロックしました
- WAIT_FOR_CONCURRENT_GCは20ミリ秒ブロックしました
- GC_FOR_ALLOCは718Kを解放し、31%が9948K/14256Kを解放し、一時停止49ミリ秒、合計51ミリ秒
- D/skia:---デコーダー->デコードはfalseを返しました
- 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色空間にある画像でした。
Picasso.with(Context).setLoggingEnabled(true)
を使用してPicassoログを有効にできます。おそらく、エラーメッセージとその理由が表示されます。
念のため、使用しているURLをログに記録し、ブラウザで試してみる価値もあります。
マニフェストでインターネットの許可を確認する
<uses-permission Android:name="Android.permission.INTERNET"/>
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);
この問題に関連するかどうかわからないが、私の問題はピカソの代わりにグライドを使用して解決されます。
うまくいかない場合は、画像をホストしているサーバーに何らかの問題があるため、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
私は同じエラーに直面していました。同じ画像のサイズを変更し、firebaseにアップロードしてから、picassoを使用してURLをロードしましたが、今回はまったく問題なく動作しました。イメージが正常にロードされました。
サイズ変更される前に、同じ画像が表示されず、ピカソのログもありませんでした。
本当の問題は画像サイズにあることを理解するのに2日近くかかりました。画像のサイズを500x500に変更しましたが、すべて正常に機能しました。
注:私の場合、デバイスのカメラから画像をキャプチャし、それをFirestoreにアップロードしてから、picassoを使用して画像をロードしていました。この問題を解決するために、onActivityResult()
メソッドで画像のサイズを変更し、サイズ変更した画像をローカルストレージに保存し、Firestoreにアップロードし始めました。
Picasso:out of memory を見てください
ImageViewで固定サイズを使用していることを確認し、詳細情報を参照してください @ Samuil Yanovski answer
お役に立てれば!!