您的位置:首页 > 其它

glide等图片缓存框架替换缓存图片解决方案

2016-11-14 00:00 127 查看
应用场景:

手机app 用户的头像地址 在服务器上是固定的,比如有些服务器喜欢以 用户手机或者用户id 作为唯一标识,那么用户头像地址看起来是这样的:
http://xxx.com/headimage/uid_1233.jpg
在app里重新设置头像之后,由于用户的头像地址是固定的,glide等缓存框架已经缓存了 url对应的图片,那么app的个人中心页面显示的头像还是原来旧的头像。

问题分析:

1. 如果glide等框架提供类似这样的方法: setCache(String url, Bitmap image) 这样修改头像之后,我们只需要调用一下这个方法,重新设置url对应的缓存 图片即可。

如IOS 版本的图片缓存框架 SDWebImage, 里面有个方法 叫 saveCache:(UIimage*)image forKey:(NSString*)url 这个方法直接替换掉 本 地 以url为 key的缓存图片。

可惜glide我并没有找到。

解决方案:

对于有些图片框架,没有提供重新设置 url对应的缓存内容的api
这个问题的解决方案是这样的:
xxx.com/image/1.pngxxx.com/image/1.png ?1469247425923
这2个url 获取到的图片是一样的

so,当你app里面更改了图片,而服务器里图片url是固定不变的, 你只需要在你 的url地址后面 加个 ?和一些字符串,如时间戳,那么用这个 新的url 替换你的旧的url,然后用 图片框架重新加载一遍。

例如上面那个例子里:

if(头像上传成功了){
String newURL=BCUtil.reSetHeadImageURL(mySharedPreferences.getUserLoginHeadURL());
mySharedPreferences.saveUserLoginHeadURL(newURL);
Glide.with(AccountDetailActivity.this).load( mySharedPreferences.getUserLoginHeadURL()).into(image_head) ;
}

public static String reSetHeadImageURL(String oldURL) {
String newURL;
int position = oldURL.indexOf("?");
if (position > 0) {
newURL = oldURL.substring(0, position);
newURL = newURL + "?" + System.currentTimeMillis();
} else {
newURL = oldURL + "?" + System.currentTimeMillis();
}
return newURL;
}

欢迎加入我的交流群:416157653
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  glide 缓存