web-dev-qa-db-ja.com

Android-フレスコディスクキャッシュから画像ファイルを取得するにはどうすればよいですか?

Fresco ライブラリを使用しています。

Frescoのドキュメントに関連情報が見つかりません。Frescoのディスクキャッシュから画像ファイルを取得するにはどうすればよいですか?

12
Eldar Miensutov

画像がキャッシュにダウンロードされている場合は、次のように実行できます。

ImageRequest imageRequest=ImageRequest.fromUri(url);
CacheKey cacheKey=DefaultCacheKeyFactory.getInstance()
     .getEncodedCacheKey(imageRequest);
BinaryResource resource = ImagePipelineFactory.getInstance()
     .getMainDiskStorageCache().getResource(cacheKey);
File file=((FileBinaryResource)resource).getFile();
5
danhantao

これがお役に立てば幸いです

このリンクでPlamenkosの回答を確認してください。 https://github.com/facebook/fresco/issues/8

パイプラインにエンコードされた画像を要求し、ImageRequestBuilder.setLowestPermittedRequestLevelでDISK_CACHEを指定すると、画像がディスクキャッシュまでのどこかで見つかった場合、パイプラインはJPEGバイトを返します。画像が見つからず、フルフェッチが行われる場合はnullを返します。実行する必要があります。

私はあなたの質問を誤解して間違った答えを提供しなかったことを望みます。

2
Jalpesh
_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)

フレスコは最初にディスクから、次にネットから画像を取得します。

2
shuo Han

キャッシュは内部実装であるため、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スレッドで使用できます。

1
abcfrom0
 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
    }
0
NickUnuchek