Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从同一url在Glide中重新加载图像?_Android_Android Glide_Image Loading - Fatal编程技术网

Android 如何从同一url在Glide中重新加载图像?

Android 如何从同一url在Glide中重新加载图像?,android,android-glide,image-loading,Android,Android Glide,Image Loading,我正在使用Glide image loader从特定URL加载图像,现在如果我将图像更新为相同的URL,Glide仍会在imageview中显示缓存的图像。如何从同一URL重新加载映像?使用.diskCacheStrategy(diskCacheStrategy.NONE) 使用下面的代码,它的工作为我好。设置diskCacheStrategy(diskCacheStrategy.NONE)和skipMemoryCache(true)。它将每次加载图像 Glide.with(Activity.t

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

使用
.diskCacheStrategy(diskCacheStrategy.NONE)


使用下面的代码,它的工作为我好。设置diskCacheStrategy(diskCacheStrategy.NONE)skipMemoryCache(true)。它将每次加载图像

Glide.with(Activity.this)
    .load(theImagePath)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    .into(myImageViewPhoto);

根据
Glide
wiki
Caching和Cache invalization

选项1(Glide v4):使用
ObjectKey
更改文件的日期修改时间

Glide.with(requireContext())
    .load(myUrl)
    .signature(ObjectKey(System.currentTimeMillis().toString()))
    .into(myImageView)
选项1(Glide v3):使用
StringSignature
更改文件的日期修改时间

Glide.with(requireContext())
    .load(myUrl)
    .signature(ObjectKey(System.currentTimeMillis().toString()))
    .into(myImageView)
URL-尽管使URL无效的最佳方法是确保服务器更改URL并在URL内容更改时更新客户端,但您也可以使用StringSignature混合任意元数据

Glide.with(yourFragment)
    .load(url)
    .signature(new StringSignature(String.valueOf(System.currentTimeMillis()))
    .into(yourImageView);
如果所有其他操作都失败,并且您既不能更改标识符,也不能跟踪任何合理的版本元数据

选项2:您还可以使用
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);
Glide.with(Activity.this).load(url)
    .diskCacheStrategy(DiskCacheStrategy.NONE )
    .skipMemoryCache(true)
    .into(imageView);

参考资料:

经过几个小时的努力,我找到了解决方案。您可以通过添加StringSignature来混合文件的日期时间。因此,当文件加载时,它将始终使用最新的。如下所示

Glide.with(this)
.load(image_url)
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(imageview);
参考:添加

签名(新的ObjectKey(String.valueOf(System.currentTimeMillis())))


我使用了一种变通方法,因为没有其他方法适合我


在我的例子中,我知道当服务器上的图像发生变化时,我只是在url的末尾添加
?=
,对于glide,它将是一个新的url,而不是使用缓存,glide将加载新图像。

如果我只想在图像的url更改时加载图像,该怎么办?如果我只想在图像的url更改时加载图像,该怎么办?glide 4签名的最新文档:当我尝试itOMG时,这两种方法都不会显示为有效方法。我不敢相信这是最好的答案,其他答案也重复了这一点。签名(ObjectKey(System.currentTimeMillis().toString())不是上次更新的日期时间(我们也无法神奇地知道文件在服务器上最后一次更新时没有点击它),它只是基于当前时间的签名,因此每毫秒都会发生更改。这不是缓存,每次再次调用此调用以将同一图像加载到其他视图(超过毫秒)时,将再次从服务器获取图像。如果文件缓存后超过毫秒,这只是缓存失效。最好是完全没有缓存。如果文件缓存后经过的时间超过毫秒,这只是缓存失效。最好根本没有缓存。