我有一个相同的图像网址.当我多次更新此图像时,它会显示上一张图像.服务器上的图像和图片版本已更新,但Glide未显示新图像.我希望每次都获取新图像并对其进行缓存.
Glide.with(context) .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture()) .placeholder(R.drawable.ic_profile).dontAnimate() .diskCacheStrategy(DiskCacheStrategy.SOURCE) .signature(new (SettingManager.getUserPictureVersion(context))) .into(ivUserProfilePhoto);
我可以通过改变互联网重现这个错误,在一个互联网上它的变化图像在其他互联网上预期它在2或3次尝试改变图像后保持相同
//Use bellow code, it work for me.Set skip Memory Cache to true. it will load the image every time. Glide.with(Activity.this) .load(theImagePath) .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .into(myImageViewPhoto);
滑翔4.x.
Glide.with(context) .load(imageUrl) .apply(RequestOptions.skipMemoryCacheOf(true)) .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE)) .into(imageView);
滑翔3.x.
Glide.with(context) .load(imageUrl) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView);
这是一个老问题,所以我相信你现在已经解决了.不过我相信这两个大型图书馆(毕加索和格莱德)现在都支持类似的东西.
Glide有其标志性的API,您可能希望查看:https: //github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation
Glide.with(yourFragment) .load(yourFileDataModel) .signature(new StringSignature(yourVersionMetadata)) .into(yourImageView);
我自己没有机会使用它,但看起来你需要调用你的API来获取元数据版本,然后再调用它来实现它.
或者,看看ETags.
祝好运!
我的情况是Glide无法识别.signature()
,因此,除了@MGDavies的答案之外,您可能还需要这样的东西
// in kotlin Glide.with(context) .load("url") //using apply to RequestOptions instead signature directly .apply(RequestOptions().signature(ObjectKey("time that image was updated"))) .into(thumb)
首次加载图片时,图片会本地存储在所谓的缓存内存(或简称为缓存)中。当您第二次请求它时,Glide从缓存中获取是否成功,就好像它是成功的请求一样。
这意味着有很多很好的理由,例如:卸载服务器,为用户保存一些数据并通过快速响应为他们提供顺畅的用户体验。
现在,关于您的问题。您需要禁用缓存,以强制Glide每次要求远程获取图像。只需执行以下操作:
Glide.with(context) .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture()) .placeholder(R.drawable.ic_profile).dontAnimate() .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .signature(new (SettingManager.getUserPictureVersion(context))) .into(ivUserProfilePhoto);
或为每张图片使用唯一的签名。(Kinda hacky但能解决问题)
Glide.with(context) .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture()) .placeholder(R.drawable.ic_profile).dontAnimate() .signature(new StringSignature(String.valueOf(System.currentTimeMillis()))) .into(ivUserProfilePhoto);
另一种干净的方法是在服务器中配置图片的缓存策略并使用.diskCacheStrategy(DiskCacheStrategy.SOURCE)
。
滑行缓存API 在这里。