您的位置:首页 > 理论基础 > 计算机网络

ImageView显示网络图片,避免NetworkOnMainThreadException错误

2015-11-30 00:00 447 查看
摘要: 小小的一个根据网络路径显示图片在ImageView中就折腾了我小一个钟头,写完一种各种错,网上找了各种解决方案,现在总结下。

从网上找到适合我的的解决方案大概如下:

需求:主线程中给ImageView赋值一个路径。

Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
//这里调用了要显示图片的代码
new LongTimeTask().execute("获取的路径");
}
};
private class LongTimeTask extends AsyncTask<String, Void, String>  {

@Override
protected String doInBackground(String... params){
try {
//线程睡眠2秒,模拟耗时操作,这里面的内容Android系统会自动为你启动一个新的线程执行
Thread.sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
return params[0];
}

@Override
protected void onPostExecute(String result){
//更新UI的操作,这里面的内容是在UI线程里面执行的
try {
URL url = new URL(result);
//显示图片
iv_photo.setImageBitmap(BitmapFactory.decodeStream(url.openStream()));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

另外还必须有两句代码写在onCreate()中

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().
detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().
detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

大功告成,希望能帮到你们
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息