解决NetworkOnMainThreadException

转自:http://www.aitinan.com/4387.html

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧。

解决办法有两个思路,分别是:

第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单)
在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码

?


1

2

3

4

if (android.os.Build.VERSION.SDK_INT > 9) {

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);

}

第二种方法:使用Thread、Runnable、Handler (推荐使用)
在Runnable中做HTTP请求,不用阻塞UI线程~

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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

        //

        // TODO: http request.

        //

        Message msg = new Message();

        Bundle data = new Bundle();

        data.putString("value","请求结果");

        msg.setData(data);

        handler.sendMessage(msg);

    }

}

解决NetworkOnMainThreadException,布布扣,bubuko.com

时间: 2025-01-05 20:06:59

解决NetworkOnMainThreadException的相关文章

[Android学习系列18]线程,进程,异步的一些事

解决NetworkOnMainThreadException http://www.aitinan.com/4387.html 参考: android进程与线程详解一:进程 android进程与线程详解二:线程 android进程与线程详解三:AsyncTask android进程与线程详解四:线程安全和进程间通信 [Android学习系列18]线程,进程,异步的一些事,码迷,mamicode.com

[Android学习系列16]Android把php输出的json加载到listview

首先写个php脚本输出json,注意,还要输出回车,方便android的bufferreader读取一行 <?php class Book { public $bookid; public $bookname; public $bookinfo; function __construct($id,$name,$info ){ $this->bookid = $id; $this->bookname = $name; $this->bookinfo = $info; } } $boo

安卓开发解决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 关于“NetworkOnMainThreadException”出错提示的原因及解决办法

http://blog.csdn.net/aminfo/article/details/7903112 几乎每天都在论坛里面看到有网友问这个问题,代码是无误的,在低版本的API上都可以运行的,但在3.0以上的版本就会出现NetworkOnMainThreadException 出现Android.os.NetworkOnMainThreadException错误提示的原因 原因:不允许在主线程中进行网络访问 解决办法:将网络访问的操作单独放到一个线程中,代码如下: [java] view pla

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

[Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时候,抛出一个如题的异常: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

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

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

解决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