Picasso加载头像问题
来源:互联网 发布:英文网络面试常用口语 编辑:程序博客网 时间:2024/05/16 12:49
概述
最近项目中碰到了用户上传头像之后,picasso加载用户头像显示的还是之前的头像的问题,原因是加载的图片地址没有变化,picasso加载时默认加载了缓存中的图片。
分析
在网上搜索了很多,大多的解决办法是这一种:
Picasso .with(context) .load(url) .memoryPolicy(MemoryPolicy.NO_CACHE) .networkPolicy(NetworkPolicy.NO_CACHE) .into(imageView);
通过调用
不进行缓存,每次加载头像都通过网络加载
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.NO_CACHE)
但是这样感觉很耗流量,体验效果不好
最好应该是能够在头像上传成功之后,清除之前的头像缓存,然后重新加载头像,重新给缓存
然后试着调用
Picasso.with(context).invalidate(url);
发现这样只能够清除磁盘缓存,不能清除内存缓存,需要退出app后清除内存缓存重新进入app才会显示上传后的头像。
实现
既然清理缓存没办法,只好通过修改url来实现,毕竟不同的url,picasso总不会自动加载缓存吧。
可以通过在url尾部加上时间戳值,这样请求的图片也不会变化。
对于不同图片格式的url,比如http://xxx.xxxx.com/xxxxx.jpg?xxxxxxxx可以在尾部加“&”+System.currentTimeMillis();比如http://xxx.xxxx.com/xxxxx.jpg可以在尾部加“?”+System.currentTimeMillis()
我在项目中给定了一个全局变量mCurrentTime,在头像上传成功后
Toast.makeText(context, "上传成功", Toast.LENGTH_SHORT).show(); Picasso .with(context) .invalidate(url+"&"+mCurrentTime); mCurrentTime = System.currentTimeMillis(); Picasso .with(context) .load(url+"&"+mCurrentTime) .resize(DensityUtil.dp2px(context,60), DensityUtil.dp2px(context,60)) .transform(new PicassoCircleTransform()) .into(userImg);
先清除了之前头像的缓存,设置当前时间,加入到url尾部
一般显示头像就加载url+”&”+mCurrentTime地址就行了
其它诸如Glide等图片加载框架遇到这问题也可以这样解决。
阅读全文
1 0
- Picasso加载头像问题
- 解决Picasso加载图片出现闪烁的问题
- Picasso图片框架加载图片 使用及缓存问题
- Picasso使用问题记录 - 加载local camera image 失败
- Picasso 图片加载库
- Picasso加载图片
- Picasso加载图片
- Picasso加载图片
- Picasso加载图片
- 使用Picasso加载图片
- Picasso 加载图片
- 使用Picasso加载图片
- Picasso 图片加载
- 图片加载框架-Picasso
- 使用Picasso加载图片
- picasso Android图片加载
- Picasso图片加载方式
- 图片加载框架Picasso
- 如何快速掌握一门新技术/语言/框架
- Java 并发编程 Copy-On-Write
- 解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限
- JMS基本概念
- linux下安装cmake
- Picasso加载头像问题
- 基于matlab-GUI数字音频处理系统(二)
- 批处理 逻辑命令符
- 抽屉类型代码
- 仿AppStore 首页 转场动画
- 【工作中学到的小技巧】json
- 宋宝华:用systemd-nspawn运行最轻量级容器
- Opensource Circle: Docker和LXC的本质区别
- Angular4关于一个组件获取另一个组件中的变量的另外一种方式