woshidan's blog

あいとゆうきとITと、とっておきの話。

PicassoでMediaStoreを通してローカルの画像を読み込むとサムネがおかしい

昨日のつらぽよを書き出しておきます。

コンテンツプロバイダでローカルの画像を取得してPicasso使ってギャラリーみたいなことやりたいなぁ、と思っていたら、なんとこのギャラリー、タップするたびに同じ位置に入る画像が変わるので困りました。

最初は、

stackoverflow.com

Picasso — Influencing Image Caching

を見てネットワークやメモリのキャッシュを使わないように設定したり、

あるいは RecyclerView の各種要素に挿入するために矢継ぎ早に画像取得のリクエストを送っているもので、どこかで取得に失敗したときに違う要素の画像データを受け取っているといった感じの

stackoverflow.com

あたりを参考に、 RecyclerView の onBindViewHolder で画像を load() メソッドで読み込む前に cancelRequest を呼んでみたりしてました。

はたまたテストのしすぎで端末のデータがおかしいのかな、ということで、

sato001.com

あたりを見て、端末のキャッシュをクリアしてみたり。

けれど、いずれも効果はなく、Picassoのissue見てたら下記のissueの件のようでした。

github.com

既知の問題ではあるようなのですが、去年の五月~六月から進捗ないみたい!

とりあえず勢いに任せてforkしてみたのですが、まいったなぁ、ということで、

qiita.com

qiita.com

の記事を参考に Glide と Universal Image Loader を試してみて、ほとんどデフォルトの簡単な設定だと Universal Image Loader はスクロールするだけで同じ箇所の画像がぽろぽろ入れ替わる形で不安があった一方で Glide が特に考えなくても使えたため、 MediaStore だけ Glide を使ってしのぎました。

Glide も fromMediaStore() メソッドを呼び出さないと一部画像が呼び出されなくて相当焦ったのであしからず...。