在我的应用程序中,我从服务器获取图像到Imageview。我使用这段代码:
try {
GlideApp.with(mContext)
.load(myCard.url)
.placeholder(R.drawable.no_connection)
.apply(new RequestOptions().centerCrop())
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(arkafon);
} catch (Exception e) {
e.printStackTrace();
}
它可以工作,但每次应用程序下载图像作为一个新的,因此互联网使用量增加。是否可以检查图像是否已更改,应用程序应下载新的图像。否则如果图像应用程序没有变化应该使用在图像之前下载。
答案 0 :(得分:2)
如果要加载与先前加载的文件同名的新图像,则必须具有一个将定义图像唯一性的字段。 我给你举个例子:假设你有一个带有url的个人资料图片,所以你还需要一个标志告诉我们最新更新的日期和时间 如果你有这种独特性,你可以通过下面的代码加载图像。 在下面的示例中,我的lastModified是唯一字段。
Glide.with(this)
.load(avatarFile)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.signature(new StringSignature(String.valueOf(avatarFile.lastModified())))
.into(ivProfile);
答案 1 :(得分:0)
它看起来很丑,但这是我的解决方案
import java.util.Calendar;
import java.util.Date;
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
try {
GlideApp.with(mContext)
.load(myCard.url)
.placeholder(R.drawable.no_connection)
.apply(new RequestOptions().centerCrop())
.signature(new ObjectKey(String.valueOf(cal.get(Calendar.MONTH))))
.into(arkafon);
} catch (Exception e) {
}
它会每月更新所有图片,如果您以前想要,可以使用Calendar.WEEK_OF_YEAR
答案 2 :(得分:0)
我也遇到了这个问题,终于找到了这个问题,解决了这个问题。请参阅此Glide issue
我的代码是这样的。 DataSave 是 SharedPreferences 的实用程序类。
String oldSignature = DataSave.readData(signatureKey);
String newSignature = String.valueOf(System.currentTimeMillis());
DataSave.saveData(signatureKey, newSignature);
Glide.with(context)
.load(glideUrl)
.thumbnail(Glide.with(context)
.load(glideUrl)
.signature(new ObjectKey(oldSignature)))
.signature(new ObjectKey(newSignature))
.placeholder(placeHolder)
.error(placeHolder)
.listener(listener)
.into(imageView);