Fresco不会使用网络中的图像更新磁盘缓存

时间:2015-06-24 15:04:28

标签: android image-caching fresco

我一直试图通过Facebook使用Fresco库。

从文档中我了解到,当我们使用ImagePipeline时,图像的缓存与SimpleDraweeView s开箱即用。我几乎看到只有轻微的打嗝才能完美地工作,尽管Fresco从我的URI中获取图像,但DiskCache和其他缓存中的图像并没有被它取代。

我对我的代码获取图片持肯定态度,因为在我清除缓存后第一次运行应用时,我的图片会显示,我实现了RequestListenerControllerListener两人都取得了成功。

这是我目前的设置:

// Setting the collaborator image.
GenericDraweeHierarchy collaboratorPicHierarchy =
    genericDraweeHierarchyBuilder
         .setPlaceholderImage(
             getInitialsAsDrawable(
                 collaborator.getUser().getInitials()
             )
         )
         .setRoundingParams(new RoundingParams()
             .setRoundAsCircle(true)
         )
         .build();
    holder.collaborator.setHierarchy(collaboratorPicHierarchy);
    holder.collaborator.setImageURI(
        Uri.parse(AltEngine.formURL("user/getProfilePic/") +
            accessToken + "/" +
            collaborator.getUser().getUuid()
        )
);

所有这些代码都在Adapter中,在Adapter的构造函数中我初始化了Fresco。

imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
    .build();
Fresco.initialize(this.context, imagePipelineConfig);

在StackOverflow中进行了大量搜索后,我发现可以使用以下代码段。

Fresco.getImagePipelineFactory().getMainDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));
Fresco.getImagePipelineFactory().getSmallImageDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));

我在与onRequestSuccess关联的ImageRequest SimpleDraweeView实例中尝试了这一点,但每次刷新ListView时都会显示占位符

我发现的下一个解决方案来自Android - How to get image file from Fresco disk cache?,这表明可能需要为Fresco实现我自己的DiskCacheConfig以使我的DiskCache无效,所以我尝试使用我在上面找到的代码配置我的DiskCache问题。

DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder().setBaseDirectoryPath(this.context.getCacheDir())
    .setBaseDirectoryName("v1")
    .setMaxCacheSize(100 * ByteConstants.MB)
    .setMaxCacheSizeOnLowDiskSpace(10 * ByteConstants.MB)
    .setMaxCacheSizeOnVeryLowDiskSpace(5 * ByteConstants.MB)
    .setVersion(1)
    .build();
imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
    .setMainDiskCacheConfig(diskCacheConfig)
    .build();
Fresco.initialize(this.context, imagePipelineConfig);

来自网络的图像仍未更新缓存。

我不知道这里出了什么问题。也许我完全没有Fresco错了。任何我如何被困在这里,并没有关于如何进行的线索。我已经经历了几次文档,由于我的运气不好,我可能错过了一些重要的东西。请指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

这基本上与此处提出的问题相同:https://github.com/facebook/fresco/issues/124

事实上,你在上面粘贴的两行中有关于从磁盘缓存中删除的正确想法。你只需要在正确的地方打电话给他们。 onRequestSuccess不是正确的地方,因为这会破坏您刚刚下载的图像。

您希望在之前从缓存中删除旧条目,甚至发出新请求。如果Fresco在磁盘上找到图像,它甚至不会发出网络请求。