Android ImageView: resolveUri failed on bad bitmap uri

如有错误欢迎指正

        想把网络的图片加载到自己的image view里面,所以用imageView.setImageURI(uri);   但是运行的时候没有加载图片,看logcat发现了标题的报错,上网搜了一下,突然醒悟,Uri本身就有别与URL,Uri是用来加载本地路径的,所以不能用imageView.setImageURI(uri);这个方法

        我们用Android中的一个服务叫 Picasso

        在build:gradle中的dependencies中添加一个依赖

implementation 'com.squareup.picasso:picasso:2.5.2'

然后可以直接在代码中用

//firstUrl 是一个图片的网络地址,second是一个imageview

Picasso.get(context).load(firstUrl).into(second);

        在写的时候遇到一个问题,Picasso爆红,找了好久原因我觉得可能是我先在类中调用了Picasso的方法,后写的依赖。我把Picasso.get(context).load(firstUrl).into(second);删掉重新写了一遍它就不爆红了。。。

        但这可能是运气,你们修改了依赖之后注意编译器有没有提示,点击sync now

         点击之后爆红就消失了

        但是程序运行的时候会报错

         他说我第81行写错了(在排错的过程中我使用了更新版本的picasso,所以这里换了种用法,如果你也要用这个用法,就把依赖中的语句改成implementation 'com.squareup.picasso:picasso:2.71828')

         我们把这个语句写到异步类的另一个函数去

        再次运行,解决

         根据现象总结经验,异步就是为了耗时操作,所以刚才的对json数据的加载和解析看成是一个耗时操作,我们接下来的这个Picasso操作是另一个操作,而这个操作是建立在上一个操作的基础之上的,我们应该保证上一个操作完成之后再做这个操作,如果你把这两个操作都放在doInBackground方法中,就没办法保证他们的同步性,所以AsyncTask给我们提供了几个不同的函数可以控制前后顺序,这个onPostExecute函数就是得等到doInBackground函数执行完毕之后才执行的,所以把Picasso操作写在这个函数之中。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>