标签:
问题描述:
问题分析:
造成这种异常的原因是安卓版本问题(仔细研究错误原因是代码不符合Android规范),网上搜索发现:android3.0版本开始(具体是不是从这个版本开始的,就不深究咯)就强制程序不能在主线程中访问网络,要把访问网络放在独立的线程中。
解决方式:
1、想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
.penaltyLog().penaltyDeath().build());
2、放在单独的线程中:(我用的是点击按钮查看网络图片,学习用)
private Bitmap bitmap = null;//全局变量 (我如果放在局部变量中,会提示:不可变的局部变量不能被赋值,懒省事就放到全局变量中咯)
按钮监听器:
private final class ButtonListenerEvent implements OnClickListener{
@Override
public void onClick(View v) {
final String path = imagePath.getText().toString();
final Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what) {
case 0:
imageView.setImageBitmap(bitmap);
break;
default:
break;
}
}
};
new Thread(){
public void run(){
try {
byte[] data = ImageService.getImage(path);
// 设置图像的位图
bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
//处理完发送一个空消息
handler.sendEmptyMessage(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplicationContext(), R.string.error, 1)
.show();
}
}
}.start();
}
}
我是安卓新手,如果有不对的地方还请大家多多指导~
安卓问题总结( android.os.NetworkOnMainThreadException异常)
标签:
原文地址:http://my.oschina.net/zhengweishan/blog/373512