Android – 如何从Fresco磁盘caching中获取图像文件?

我正在使用Fresco库。

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

Solutions Collecting From Web of "Android – 如何从Fresco磁盘caching中获取图像文件?"

如果图像已经下载到caching中,可以这样做:

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/80

如果您要求pipe道使用编码图像,并使用ImageRequestBuilder.setLowestPermittedRequestLevel指定DISK_CACHE,则pipe道将返回JPEG字节(如果图像位于磁盘caching的任何位置);如果找不到图像,必须执行。

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

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

但是如果你想知道一个图像是否被caching,你可以使用这个:

 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_CACHE)

将使壁画得到您的图像从磁盘上,然后网。