android.os.NetworkOnMainThreadException 解决办法:

产生的原因:

在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况

解决办法:

1.在发起Http请求的Activity里面的onCreate函数里面添加如下代码

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

2.使用Thread、Runnable、Handler这三个类

public void onCreate(Bundle savedInstanceState) {   
 super.onCreate(savedInstanceState);  
  this.setContentView(R.layout.share_mblog_view); 
   new Thread(runnable).start();
}

Handler handler = new Handler(){
    @Override   
 public void handleMessage(Message msg) {      
        super.handleMessage(msg);
        Bundle data = msg.getData();
        String val = data.getString("value");
        Log.i("mylog","请求结果为-->" + val);
    }
}

Runnable runnable = new Runnable(){
    @Override   
    public void run() {      
        Message msg = new Message();
        Bundle data = new Bundle();
        data.putString("value","请求结果");
        msg.setData(data);
        handler.sendMessage(msg);
    }
}
时间: 2024-08-01 11:33:44

android.os.NetworkOnMainThreadException 解决办法:的相关文章

android.os.NetworkOnMainThreadException异常处理办法

网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧. 在发起Http请求的Activity里面的onCreate函数里面添加如下代码: 1 //详见StrictMode文档 2 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().pe

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

Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法

android.os.NetworkOnMainThreadException 异常的解决办法, 刚开是把HttpURLConnectionnection 打开连接这个方法放在UI线程里了,可能不是线程安全的,而且这个方法请求是需要等待的,所以就抛出了这个异常,后来用子线程打开的HttpURLConnection, 一切就都正常了,只要在主线程里开启子线程就行了.子线程利用URL 问题解决.下面贴一段代码 String file1 = SERVER_PATH; URL url = new URL

安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  |举报|字号 订阅 在android 2.3上访问网络的方法,在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,主要问题在于4.0中访问网络不能在主线程中进行,有两个方法可以解决.第一种是在主线程中增加如下代码[不推荐]: // 详见

[Android开发那点破事]解决android.os.NetworkOnMainThreadException

[Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时候,抛出一个如题的异常:android.os.NetworkOnMainThreadException 第一次看到这异常,字面意思是说:在主线程中的网络异常.然后我就去了解了下这个异常,

解决android.os.NetworkOnMainThreadException

一个APP如果在主线程中请求网络操作,将会抛出此异常.Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生. 解决方案有两个,一个是使用StrictMode,二是使用线程来操作网络请求. 第一种方法:简单暴力,强制使用,代码修改简单(但是非常不推荐) 在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码 1 2 3 4 if (android.os.Build.VERSION.SDK_INT > 9) {

[Android]NetworkOnMainThreadException解决办法

从 android 2.3 之后已经限制无法在主线程中使用网络抓取数据 会出现 NetworkOnMainThreadException 从 android 2.3 之后已经限制无法在主线程中使用网络抓取数据 会出现?NetworkOnMainThreadException 如果要使用网络抓数据就必须得要自己开一条线程才行 解决方法就是把网络传输的部分另外开线程去执行 另外一个方法就是在?onCreate 下加入 StrictMode.setThreadPolicy(new StrictMode

Android之android.os.NetworkOnMainThreadException异常解决

最近一直在做即时通讯,刚开始遇到一个问题,log打印出来的就是android.os.NetworkOnMainThreadException,大概的意思就是在主线程操作网络,以前都没注意过这个问题,也是第一次遇到!以前都是用AsyncTask,简单,快捷,还可以直接操作UI,我就是一个找虐的人,这次偏不这么做了,直接用handler,于是乎就遇到了这个问题. Android 4.0以后不允许网络操作在主线程中进行,那就用异步方法来操作 简单贴一下代码: new Thread(new Runnab

android.os.NetworkOnMainThreadException异常

最近好忙啊,准备完比赛的东西就准备驾考,终于可以稍微歇息下了,好久没写了.今天解决了一个对之前的我来说是一个很大的问题,好开心呀!! 之前项目开发是用2.3开发 测试手机是android4.4时候提示 android.os.NetworkOnMainThreadException异常 第一次看到这异常,字面意思是说:在主线程中的网络异常.然后我就去了解了下这个异常,先看看官方的说明: public class NetworkOnMainThreadException extends Runtim