【发布时间】:2018-06-01 20:17:48
【问题描述】:
我正在使用 Glide 图像加载器从特定 URL 加载图像,现在如果我将图像更新到相同的 URL,Glide 仍然在我的 imageview 中显示缓存的图像。如何从同一个 URL 重新加载图片?
【问题讨论】:
标签: android android-glide image-loading
我正在使用 Glide 图像加载器从特定 URL 加载图像,现在如果我将图像更新到相同的 URL,Glide 仍然在我的 imageview 中显示缓存的图像。如何从同一个 URL 重新加载图片?
【问题讨论】:
标签: android android-glide image-loading
使用.diskCacheStrategy(DiskCacheStrategy.NONE)
Glide.with(context)
.load(url)
.apply(new RequestOptions()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true))
.into(ImageView);
【讨论】:
使用下面的代码,它对我来说很好用。设置 diskCacheStrategy(DiskCacheStrategy.NONE) 和 skipMemoryCache(true)。每次都会加载图片。
Glide.with(Activity.this)
.load(theImagePath)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(myImageViewPhoto);
【讨论】:
根据Glide wiki Caching-and-Cache-Invalidation
选项 1 (Glide v4):使用 ObjectKey 更改文件的日期修改时间。
Glide.with(requireContext())
.load(myUrl)
.signature(ObjectKey(System.currentTimeMillis().toString()))
.into(myImageView)
选项 1 (Glide v3):使用 StringSignature 更改文件的日期修改时间。
URLs - 虽然使 URLs 失效的最佳方法是确保服务器更改 URL 并在 URL 的内容更改时更新客户端,但您也可以使用 StringSignature 混合任意元数据
Glide.with(yourFragment)
.load(url)
.signature(new StringSignature(String.valueOf(System.currentTimeMillis()))
.into(yourImageView);
如果一切都失败了,您既不能更改标识符也不能跟踪任何合理的版本元数据,
选项 2:您还可以使用 diskCacheStrategy() 和 DiskCacheStrategy.NONE 完全禁用磁盘缓存
Glide.with(Activity.this).load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE )
.skipMemoryCache(true)
.into(imageView);
参考:https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation
【讨论】:
挣扎了几个小时后,我找到了解决方案。您可以通过添加StringSignature来混合文件的日期时间。所以当文件加载时,它将始终使用最新的。像这样
Glide.with(this)
.load(image_url)
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(imageview);
参考:https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation
【讨论】:
添加
签名(new ObjectKey(String.valueOf(System.currentTimeMillis())))
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.cover_placeholder);
requestOptions.error(R.drawable.no_image_available);
requestOptions.signature(
new ObjectKey(String.valueOf(System.currentTimeMillis())));
Glide.with(MosaicFragment.this)
.setDefaultRequestOptions(requestOptions)
.load(finalPathOrUrl)
【讨论】:
我使用了一种解决方法,因为没有其他方法适合我
就我而言,我知道当服务器上的图像发生变化时,我只是在 url 的末尾添加?=,对于 glide,它将是一个新的 url,而不是使用缓存 Glide 将加载新的图片。
【讨论】: