Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-如何从Fresco磁盘缓存中获取图像文件?_Java_Android_Image Caching_Fresco - Fatal编程技术网

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

Java Android-如何从Fresco磁盘缓存中获取图像文件?,java,android,image-caching,fresco,Java,Android,Image Caching,Fresco,我正在使用图书馆 我在壁画文档中找不到任何相关信息, 如何从Fresco的磁盘缓存中获取图像文件?我希望这能有所帮助 请检查此链接上的Plamenkos答案 如果向管道请求编码图像,并使用ImageRequestBuilder.setLowestPermittedRequestLevel指定DISK_CACHE,则管道将返回JPEG字节(如果在磁盘缓存之前的任何位置找到图像),如果未找到图像且必须执行完全取数,则管道将返回null 我希望我没有误解您的问题,并提供了错误的答案。如果图像已在缓存中

我正在使用图书馆

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

我希望这能有所帮助

请检查此链接上的Plamenkos答案

如果向管道请求编码图像,并使用ImageRequestBuilder.setLowestPermittedRequestLevel指定DISK_CACHE,则管道将返回JPEG字节(如果在磁盘缓存之前的任何位置找到图像),如果未找到图像且必须执行完全取数,则管道将返回null


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

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

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

我认为你不应该试图得到壁画缓存的名称,因为缓存是内部实现

但如果您想知道图像是否已缓存,可以使用以下方法:

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

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\U缓存)


将使fresco先从磁盘然后从网络获取您的图像。

虽然我无法回答您的问题,但我很好奇,为什么您要使用这个新的库,而不是记录得足够好的Glide或毕加索?@Stan我也对一个答案感兴趣,因为我决定尝试那个库。为什么?”因为它提供了毕加索没有的一些有趣的特性,比如1。是的,我们正在使用渐进式JPEG。2.这是新的。所有的新事物都很有趣)嗯,实际上它对我来说也很有趣,因为它有一些本机的实现,比如JPEG/PNG解码器和其他功能。不过,我在一个项目中尝试过它与UIL的比较,使用UIL在滚动时在ListView中有更好的性能。使用Glide时,毕加索和壁画列表在滚动时会滞后,但使用UIL时不会。必须指出的是,这些libs都没有从缓存中获取图像文件的常规方法。这总是有一些棘手的方式,对于UIL也是。顺便说一句,使用我们可以得到压缩图像。它实际上就像一个图像文件的内容。比“.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)”更快?对不起,刚才我把你的答案搞错了。但是它帮助我理解,所以谢谢!我收到错误:“无法解析
getMainDiskStorageCache()
”警告,此方法返回Kotlin中文件的编码版本,代码如下:
ImagePipelineFactory.getInstance().mainFileCache.getResource(cacheKey
 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
    }