通过URL获取网络图片报NetworkOnMainThreadException

首先通过url加载网络图片的方法为:

public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}

但是出现了崩溃,查看日志,看到报错异常:NetworkOnMainThreadException;
突然醒悟过来,就是Android为了防止在主线程进行超时的操作类似于网络请求而导致的页面卡死现象而报异常
那么有两种办法解决:
1.强制执行:
就在OnCreate方法里加上一下代码:
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
2.第二种方法就是使用Thread去操作。在Runnable中做HTTP请求,不用阻塞UI线程。
在onCreate方法里:
new Thread(runnable).start;
然后就是:
Runnable runnable = new Runnable() {
@Override
public void run() {
Message msg = new Message();
bitmaps = getBitMBitmap(piclink);
Bundle bundle = new Bundle();
bundle.putParcelable("bitmaps",bitmaps);
msg.setData(bundle);
handler.sendMessage(msg);

}
};
public Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
Bitmap bitmapss = data.getParcelable("bitmaps");
Log.i("請求結果"+bitmapss);

}
};


转载于:https://www.cnblogs.com/carina-jiang/p/7477343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值