如有错误欢迎指正
想把网络的图片加载到自己的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操作写在这个函数之中。