Fresco 未使用来自网络的图像更新磁盘缓存

Fresco not updating disk cache with images from the network

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

从文档中我了解到,当我们使用 SimpleDraweeView 时,图像缓存与 ImagePipelines 开箱即用。尽管 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()
        )
);

所有这些代码都位于适配器中,并且在适配器的构造函数中我已经初始化了 Fresco。

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

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

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

我在与 SimpleDraweeView 相关联的 ImageRequest 实例的 onRequestSuccess 中进行了尝试,但这导致每次刷新 ListView 时都会显示占位符不好。

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

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 弄错了。无论如何我被困在这里并且不知道如何进行。我已经看过几次文档,由于运气不好,我可能错过了一些重要的东西。请给我指明正确的方向。

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

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

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