使用Android Glide查找带有签名的缓存图片

3
我正在使用这段代码,因为每次服务器上的图像更改时,我都希望下载最新的图像。
 Glide.with(yourFragment)
 .load(yourFileDataModel)
 .signature(new StringSignature(new ObjectKey(System.currentTimeMillis()))
 .into(yourImageView);

但是这里有一个问题。如果网络连接中断(或其他情况),Glide 无法在磁盘缓存中找到图像并显示错误。如何使用签名来查找缓存的图像?

3个回答

3
您使用了错误的key用于签名。每毫秒System.currentTimeMillis()都会改变。您想要做的是提供一个仅在图像更改时才会更改的键。您需要执行类似以下操作。您可以从服务器获取image.getUpdatedAt()
GlideApp.with(context)
        .load(glideUrlCacheKey)
        .signature(new ObjectKey(image.getUpdatedAt()))
        .into(holder.customerImage);

所以在从服务器加载图像之前,我需要请求服务器的修改日期。看起来有些麻烦...顺便说一句,我认为这个答案至少解释了为什么Glide总是不使用缓存。这里是+1。 - Yeung
@Yeung Glide自动进行缓存,只要URL相同或图像数据未因空间限制而被删除,它就应该正常工作。使用签名密钥是一种特殊情况,您希望对缓存有更多的控制。在我们的情况下,图像URL始终在变化,因为它们都是私有的,但我仍然需要缓存它们,所以我们使用了虚拟URL和签名密钥来更新缓存的图像。 - Ranjan

1
这个答案可能对您有帮助。
Glide.with(mContext)
  .load(urlProfile)
  .apply(RequestOptions.signature(new StringSignature(...))
      .diskCacheStrategy(DiskCacheStrategy.NONE))
  .into(imageView);

通过应用RequestOptions来使用signature

有用的链接: http://bumptech.github.io/glide/doc/options.html#requestoptions


1

为了离线工作,将图像的URL存储在SQLite中,并检查是否没有网络连接,然后从SQLite中给Glide提供URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接