Fresco ライブラリを使用しています。
Frescoのドキュメントに関連情報が見つかりません。Frescoのディスクキャッシュから画像ファイルを取得するにはどうすればよいですか?
画像がキャッシュにダウンロードされている場合は、次のように実行できます。
ImageRequest imageRequest=ImageRequest.fromUri(url);
CacheKey cacheKey=DefaultCacheKeyFactory.getInstance()
.getEncodedCacheKey(imageRequest);
BinaryResource resource = ImagePipelineFactory.getInstance()
.getMainDiskStorageCache().getResource(cacheKey);
File file=((FileBinaryResource)resource).getFile();
これがお役に立てば幸いです
このリンクでPlamenkosの回答を確認してください。 https://github.com/facebook/fresco/issues/8
パイプラインにエンコードされた画像を要求し、ImageRequestBuilder.setLowestPermittedRequestLevelでDISK_CACHEを指定すると、画像がディスクキャッシュまでのどこかで見つかった場合、パイプラインはJPEGバイトを返します。画像が見つからず、フルフェッチが行われる場合はnullを返します。実行する必要があります。
私はあなたの質問を誤解して間違った答えを提供しなかったことを望みます。
_ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(YourImageUrl))
.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)
.setResizeOptions(new ResizeOptions(width, width))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(YourImageView.getController())
.setImageRequest(request)
.build();
_
このコード:
.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)
フレスコは最初にディスクから、次にネットから画像を取得します。
キャッシュは内部実装であるため、FrescoCacheの名前を取得しようとしないでください。
ただし、画像がキャッシュされているかどうかを知りたい場合は、次のように使用できます。
private boolean isDownloaded(Uri loadUri) {
if (loadUri == null) {
return false;
}
ImageRequest imageRequest = ImageRequest.fromUri(loadUri);
CacheKey cacheKey = DefaultCacheKeyFactory.getInstance()
.getEncodedCacheKey(imageRequest);
return ImagePipelineFactory.getInstance()
.getMainDiskStorageCache().hasKey(cacheKey);
}
このメソッドは非常に高速に返され、UIスレッドで使用できます。
private fun getGitFile(gifUrl: String): File {
val request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(gifUrl))
.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)
.build()
val cacheKey = DefaultCacheKeyFactory.getInstance()
.getEncodedCacheKey(request, null)
val resource = ImagePipelineFactory.getInstance()
.mainFileCache.getResource(cacheKey)
val file = (resource as FileBinaryResource).file
return file
}