Android - 如何从Fresco磁盘缓存中获取映像文件?

时间:2015-04-21 12:59:55

标签: java android image-caching fresco

我正在使用Fresco库。

我无法在Fresco文档中找到任何相关信息, 如何从Fresco的磁盘缓存中获取图像文件?

5 个答案:

答案 0 :(得分:5)

如果图像已在缓存中下载,您可以这样做:

      <
    <xsl:if test="$actionCode ='CREATE'">                
     cre
    </xsl:if>
    <xsl:if test="$actionCode ='UPDATE'">                
        upd
    </xsl:if>
    ateStudent>

答案 1 :(得分:2)

我希望这会有所帮助

点击此链接上的Plamenkos答案.. https://github.com/facebook/fresco/issues/80

如果您向管道询问编码图像,并使用ImageRequestBuilder.setLowestPermittedRequestLevel指定DISK_CACHE,则管道将返回JPEG字节(如果图像在磁盘缓存中找到,或者如果找不到图像则为null) -fetch必须要执行。

我希望我没有误解你的问题并提供错误的答案。

答案 2 :(得分:2)

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)

将使壁画首先从磁盘上获取您的图像,然后是网络。

答案 3 :(得分:1)

我认为你永远不应该试图获得Fresco Cache名称因为缓存是内部工具。

但是如果你想知道图像是否已被缓存,你可以使用它:

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线程中使用它。

答案 4 :(得分:0)

 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
    }