报android.os.NetworkOnMainThreadException错误

问题描述:

 1、当前的项目用的是4.3,经过断点调试,知道错误发生在

HttpURLConnection con = (HttpURLConnection)url.openConnection();//打开一个connection连接
        con.setRequestMethod("GET");
        con.setConnectTimeout(5000);
        
        //得到服务器返回来的流
        InputStream is = con.getInputStream();//错误抛出的地方

    并报出如下错误:

  03-14 14:27:38.428: W/System.err(30191): android.os.NetworkOnMainThreadException

  03-14 14:27:38.429: W/System.err(30191): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1134)

 

解决:

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

   此处是主线程访问网络时出的异常。 Android在4.0之前的版本支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主

线程中了。

    网上相关资料得知,在主线程中添加如下代码即可解决:

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()); 

 

转载于:https://www.cnblogs.com/luoyaqi/p/4337537.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值