问题的提出:
我们知道,Glide的缓存是由十多个和复杂的参数来决定的,其中最关键的就是id,(当你用Glide加载网络上的图片时,这个id就是图片的url),但是我们可能会碰到这么一种情况,就是你后端返回的图片时带token的,接下来问题就来了,token作为一个验证身份的参数并不是一成不变的,很有可能时时刻刻都在变化。而如果token变了,那么图片的url也就跟着变了,图片url变了,缓存Key也就跟着变了。结果就造成了,明明是同一张图片,就因为token不断在改变,导致Glide的缓存功能完全失效了。
问题的解决:
而Glide中是利用GlideUrl类的getCacheKey()方法对传进来的URL进行处理,所以我们的解决方法就出来了,创建一个创建一个MyGlideUrl继承自GlideUrl,重写它的getCacheKey()方法,代码如下:
public class MyGlideUrl extends GlideUrl {
private String mUrl;
public MyGlideUrl(String url) {
super(url);
mUrl = url;
}
@Override
public String getCacheKey() {
//在这里面做你的代码处理,以下是郭霖大神的解决方法
return mUrl.replace(findTokenParam(), "");
}
private String findTokenParam() {
String tokenParam = "";
int tokenKeyIndex = mUrl.indexOf("?token=") >= 0 ? mUrl.indexOf("?token=") : mUrl.indexOf("&token=");
if (tokenKeyIndex != -1) {
int nextAndIndex = mUrl.indexOf("&", tokenKeyIndex + 1);
if (nextAndIndex != -1) {
tokenParam = mUrl.substring(tokenKeyIndex + 1, nextAndIndex + 1);
} else {
tokenParam = mUrl.substring(tokenKeyIndex);
}
}
return tokenParam;
}
}
最后