Picasso加载本地文件不显示问题处理

最近在写项目中如何设计图片库,随便选择了Glide(4.8.0)和Picasso(2.71828)作为切换对象,然后在Picasso遇到了一些坑,记录以下:
简单说明以下:
Glide和Picasso在传入图片路径的时候,大致都支持以下格式:

  • 网络地址:如http://xxxxx.xxx.xxx/xxx.png
  • 本地文件:/sdcard/image/xxx.png
  • 本地文件的uri格式:file:////sdcard/image/xxx.png
  • File类型:new File("/sdcard/image/xxx.png")
  • 其他格式,如uri、byte数组等等

以上格式传入的时候在不同的手机版本中Glide都可以显示出图片来,但是在Picasso,我自己测试的
/sdcard/image/xxx.png
file:////sdcard/image/xxx.png
new File("/sdcard/image/xxx.png")
Uri.parse("file:////sdcard/image/xxx.png")
Uri.fromFile(file)
这几种格式在华为meta10 pro手机上都无法显示,只有网络地址的可以显示。
这个问题研究了半天,各种网上查资料,大部分都说的是直接传入/sdcard/image/xxx.png这种格式不能显示,这个原因我是知道的,没有说明为什么传入file类型或者添加了file:////sdcard/image/xxx.png格式的也无法显示,突然想到之前做相册图片裁剪时遇到的7.0以上uri安全问题,测试了一下果然如此。解决方案如下:

public void showImage(Context context, ImageView imageView, String url) {
    Uri loadUri = null;
    if (url.startsWith("http")) {
        //网络图片
        loadUri = Uri.parse(url);
    } else {
        //本地文件
        if (url.startsWith("file://")) {
            //文件的方式
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
                //Android 7.0系统开始 使用本地真实的Uri路径不安全,使用FileProvider封装共享Uri
                url = Uri.parse(url).getPath();
            }
        }
        File file = new File(url);
        if (file != null && file.exists()) {
            //本地文件
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
                //Android 7.0系统开始 使用本地真实的Uri路径不安全,使用FileProvider封装共享Uri
                loadUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
            } else {
                loadUri = Uri.fromFile(file);
            }
        } else {
            //可能是资源路径的地址
            loadUri = Uri.parse(url);
        }
    }
    Picasso.get().load(loadUri).into(imageView);
}

虽然Picasso也挺好的,但是两个用起来以及在兼容性、实用性上面,自我感觉还是Glide使用者顺手。(性能方面不做比较)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【Android 库 Glide】 引用 Android图片加载框架最全解析(一),Glide的基本用法Andro...
    Rtia阅读 5,892评论 0 22
  • 7.1 压缩图片 一、基础知识 1、图片的格式 jpg:最常见的图片格式。色彩还原度比较好,可以支持适当压缩后保持...
    AndroidMaster阅读 2,694评论 0 13
  • 这么久以来虽然经常用到一些图库,但是自己从来没有真正整理过我们使用过的这些东西有什么不同点,我们为什么要选择这个图...
    黑石ZB阅读 3,879评论 1 16
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,317评论 0 17
  • 墨绿色的广告招牌 城市快捷酒店 城市 快捷 目的一目了然 它矗立在火车站的对面 忙碌的旅人一抬头就能看见的位...
    Yve盐阅读 595评论 2 7

友情链接更多精彩内容