报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()); 
时间: 2024-11-04 16:16:55

报android.os.NetworkOnMainThreadException错误的相关文章

Caused by: android.os.NetworkOnMainThreadException错误解决办法

错误Caused by: android.os.NetworkOnMainThreadException :查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧. 解决办法有两个思路,分别是: 第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单)在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码 if (android.os.Build.VERSION.S

调用webservice时,产生android.os.NetworkOnMainThreadException错误

android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策: 一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码: //详见StrictMode文档 StrictMode.setThreadPolicy(new StrictMode.ThreadPoli

Android加载网络图片报android.os.NetworkOnMainThreadException异常

Android加载网络图片大致可以分为两种,低版本的和高版本的.低版本比如4.0一下或者更低版本的API直接利用Http就能实现了: 1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="

出现Android.os.NetworkOnMainThreadException 错误

两种方法解决: 1.如果用的gradle打包,在build.gradle中修改配置 修改SDKVersion 为低版本(7),不能版本降低过多,否则会出现很多不适配. 2.将网络访问放在一个新的线程中,高版本上不允许网络访问阻塞主线程. new Thread() { @override public void  run() { //网路访问线程 } }.start();

主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException

1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { updateFile = Environment.getExternalStorageDirectory() + "/3530.jpg"; //downloadUpdateFil

老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException

1.一方面添加handler处理 2.方面添加下面的配置. 3.然后在主的activity中调用 //访问网络webservice兼容高版本 Utils.setSystemVersionMethod(context); 下面写在工具类中,然后在activity中调用 在调用qq快捷登录有时候会报这样的错误.原因在4.0以上不兼容webservice访问网络 //获得手机版本防止webservice访问网络在4.0以上出现问题 public static String GetSystemVersi

Android 异常 android.os.NetworkOnMainThreadException

最近在实现一个Android下的数据采集的SDK,收集用户使用数据使用HTTP发送到云平台,进行数据分析.但在发送数据时报如下错误: Caused by: android.os.NetworkOnMainThreadException 产生的原因,官方解释: Class Overview The exception that is thrown when an application attempts to perform a networking operation on its main t

异常:android.os.NetworkOnMainThreadException

Android 4.2项目:下载网络歌曲 报错:android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策: 一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码: //详见StrictMode文档StrictMode.ThreadPolicy polic

安卓问题总结( android.os.NetworkOnMainThreadException异常)

问题描述: android.os.NetworkOnMainThreadException异常(不要在主线程访问网络资源) 问题分析: 造成这种异常的原因是安卓版本问题(仔细研究错误原因是代码不符合Android规范),网上搜索发现:android3.0版本开始(具体是不是从这个版本开始的,就不深究咯)就强制程序不能在主线程中访问网络,要把访问网络放在独立的线程中. 解决方式: 1.想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上 StrictMode.setThreadPo