私は Facebook で Fresco ライブラリを使用しようとしています。
ドキュメントから、画像のキャッシュはImagePipeline
、SimpleDraweeView
. Fresco が私の URI から画像をフェッチしても、DiskCache や他のキャッシュ内の画像がそれに置き換えられないというマイナーな問題があるだけで、物事が完全に機能していることがよくわかります。
キャッシュをクリアした後、アプリを初めて実行したときに画像が表示され、 aRequestListener
と a のControllerListener
両方が成功したため、コードが画像をフェッチすることに前向きです。
これが私の現在の設定です:
// Setting the collaborator image.
GenericDraweeHierarchy collaboratorPicHierarchy =
genericDraweeHierarchyBuilder
.setPlaceholderImage(
getInitialsAsDrawable(
collaborator.getUser().getInitials()
)
)
.setRoundingParams(new RoundingParams()
.setRoundAsCircle(true)
)
.build();
holder.collaborator.setHierarchy(collaboratorPicHierarchy);
holder.collaborator.setImageURI(
Uri.parse(AltEngine.formURL("user/getProfilePic/") +
accessToken + "/" +
collaborator.getUser().getUuid()
)
);
このコードはすべて Adapter 内にあり、Fresco を初期化した Adapter のコンストラクター内にあります。
imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
.build();
Fresco.initialize(this.context, imagePipelineConfig);
StackOverflow で多くの検索を行った後、次のスニペットを使用できることがわかりました。
Fresco.getImagePipelineFactory().getMainDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));
Fresco.getImagePipelineFactory().getSmallImageDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));
に関連付けたインスタンスでそれonRequestSuccess
を試しましたが、リフレッシュするたびにプレースホルダーが表示されてしまいました。これは悪いことです。ImageRequest
SimpleDraweeView
ListView
私が見つけた次の解決策は、ここAndroid - How to get image file from Fresco disk cache? からでした。これは、Fresco が DiskCache を無効にするために独自のものを実装する必要があるかもしれないことを示唆していたDiskCacheConfig
ので、SO の質問で見つけたコードで DiskCache を構成しようとしました。
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder().setBaseDirectoryPath(this.context.getCacheDir())
.setBaseDirectoryName("v1")
.setMaxCacheSize(100 * ByteConstants.MB)
.setMaxCacheSizeOnLowDiskSpace(10 * ByteConstants.MB)
.setMaxCacheSizeOnVeryLowDiskSpace(5 * ByteConstants.MB)
.setVersion(1)
.build();
imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
.setMainDiskCacheConfig(diskCacheConfig)
.build();
Fresco.initialize(this.context, imagePipelineConfig);
それでもキャッシュはネットワークからの画像によって更新されません。
ここで何がうまくいかなかったのかわかりません。私はフレスコを完全に間違っているかもしれません。どのように私はここで立ち往生しており、続行する方法についての手がかりがありません. 私はドキュメントを数回確認しましたが、運が悪かったため、重要なことを見逃している可能性があります。適切な方向に向けてください。