android.os.NetworkOnMainThreadException 异常处理

项目是2.1开发 测试手机是android4.0时候提示android.os.NetworkOnMainThreadException异常

出错误地方是访问网络的webservice有问题

在网上找了半天说是用

@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
String strVer=GetVersion.GetSystemVersion();
strVer=strVer.substring(0,3).trim();
float fv=Float.valueOf(strVer);
if(fv>2.3)
{
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()
.build());
}
super.onCreate(savedInstanceState);

}

代码注意StrictMode是2.3以上版本才有的没办法我又把项目升级成2.3

但这样做2.3以下版本安装完成后打开后就报错,在调用StrictMode之前做了下版本判断

 从 Android 2.3 开始提供了一个新的类 StrictMode,该类可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者改进程序,使主线程处理 UI 和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞。

给 Android 应用开发者的十个建议

android.os.Build.VERSION.RELEASE;返回当前系统版本

以上问题可以解决。

注意:造成这样的错误原因是代码不符合Android规范,如果把上面访问方式改为异步操作就不会出现在4.0上访问出现android.os.NetworkOnMainThreadException异常

如:

new Thread(){
@Override
public void run(){
//你要执行的方法
//执行完毕后给handler发送一个空消息
handler.sendEmptyMessage(0);
}
}.start();

//定义Handler对象
private Handler handler =new Handler(){
@Override
//当有消息发送出来的时候就执行Handler的这个方法
public void handleMessage(Message msg){
super.handleMessage(msg);
//处理UI
}
};

更多相关文章

  1. Android(安卓)8.0 以后广播接收不到出现问题 Background executi
  2. android studio 首次安装配置和 gradle 语法学习摘记
  3. Android(安卓)Studio 编译卡慢、卡顿的几种解决方案
  4. Android(安卓)app项目和开发总结
  5. ubuntu16.04 + Qt5.13 搭建安卓开发环境
  6. Android(安卓)的消息机制(2)
  7. import project后,出现Unable to get system library for the pro
  8. Start from Android(安卓)Studio
  9. 往Android的Application对象里存储数据的陷阱

随机推荐

  1. Could not find helloworld.apk
  2. Android(安卓)获取内存信息
  3. Android中如何引入Lambda表达式
  4. android获取经纬度和地方名称
  5. Android(安卓)Interface(UI) 界面控件简
  6. webview开发-适配多分辨率的Android设备
  7. android 4.0动画学习
  8. android 自定义导航控件
  9. Android例子—直接通过Binder的onTransac
  10. android 定位服务