我一直在尝试使用Facebook的Fresco库。

从文档中我了解到,当我们使用ImagePipeline时,图像缓存与SimpleDraweeView一起使用即可。我几乎看到,只有Fresco可以从我的URI中获取图像,而DiskCache和其他Caches中的图像并没有被它取代,因此只有很小的问题才能使它们完美地工作。

我对获取图像的代码很满意,因为清除缓存后我的图像确实在我第一次运行该应用程序时显示,并且我实现了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()
        )
);


所有这些代码都位于适配器内部,并且已经在适配器的构造函数中初始化了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无效,因此我尝试使用在SO问题中找到的代码来配置我的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);


网络中的映像仍未更新缓存。

我不知道这里出了什么问题。可能是我完全错了壁画。任何我被困在这里的方式,都不知道如何进行。我已经看过文档几次,由于运气不好,我可能错过了一些重要的东西。请指出正确的方向。

最佳答案

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

实际上,在上面粘贴的两行中,从磁盘缓存中删除了您的想法。您只需要在正确的位置打电话给他们即可。 onRequestSuccess不是正确的位置,因为这会破坏您刚刚下载的图像。

您想要从缓存中删除旧条目,然后再发送新条目。如果Fresco在磁盘上找到映像,它甚至不会发出网络请求。

关于android - Fresco 不使用来自网络的镜像更新磁盘缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31030149/

10-10 08:18