我一直在尝试使用 Facebook 的 Fresco 库。
从文档中我了解到,ImagePipeline
当我们使用SimpleDraweeView
. 我几乎看到只有轻微的问题才能完美运行,即使 Fresco 从我的 URI 获取图像,DiskCache 和其他缓存中的图像也不会被它替换。
我对获取图像的代码持肯定态度,因为在我清除缓存后第一次运行应用程序时,我的图像确实会显示出来,并且我实现了 aRequestListener
和 a ControllerListener
,两者都成功了。
这是我当前的设置:
// 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 中进行大量搜索后,我发现可以使用以下 Snippet。
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? 这表明可能有必要DiskCacheConfig
为 Fresco 实现我自己的以使我的 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);
缓存仍然没有被来自网络的图像更新。
我不知道这里出了什么问题。可能是我完全弄错了 Fresco。无论如何我被困在这里并且不知道如何继续。我已经阅读了几次文档,由于运气不好,我可能错过了一些重要的东西。请指出我正确的方向。