今天碰到Android2.3.3能运行的法度到android4.0中无法运行的景象

android.os.NetworkOnMainThreadException 异常处理


在网上找了半天说是用

@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
}
};谚语


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值