如何从相同的 url 在 Glide 中重新加载图像?

How to reload image in Glide from the same url?

我正在使用 Glide 图像加载器从特定 URL 加载图像,现在如果我将图像更新为相同的 URL,Glide 仍会在我的图像视图中显示缓存的图像。如何从相同的 URL?

重新加载图像

使用.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

经过几个小时的努力,我发现 solution.You 可以通过在文件加载时添加 StringSignature.So 来混合文件的日期时间,它将始终使用最新的 one.Like 这个

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

添加

signature(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,它将是一个新的 [=15] =] 而不是使用缓存 Glide 将加载新图像。