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

转载 2015年07月09日 10:28:13
这篇文章主要介绍了Caused by: android.os.NetworkOnMainThreadException错误解决办法,本文提供了2种解决方法,需要的朋友可以参考下
<iframe id="cproIframe_u1892994_2" height="90" marginheight="0" src="http://pos.baidu.com/acom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=32&amp;cec=gb2312&amp;cfv=18&amp;ch=0&amp;col=zh-CN&amp;conBW=0&amp;conOP=1&amp;cpa=1&amp;dai=2&amp;dis=0&amp;ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DxHMq1Q1s67iSDaq_ujXMFa_O6o69WpSD-XyplcmbHcfgByXxhgYXIiF71sODPRYu%26wd%3D%26eqid%3Da7e058570000210300000003559dda58&amp;ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F52030.htm&amp;lu_161=0&amp;lunum=6&amp;n=jb51_cpr&amp;pcs=1281x623&amp;pis=10000x10000&amp;ps=514x174&amp;psr=1366x768&amp;pss=1281x517&amp;qn=1dcc344923eb4d1b&amp;rad=&amp;rsi0=580&amp;rsi1=90&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23F7FCFF&amp;rss2=%230000ff&amp;rss3=%23444444&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_3&amp;stid=5&amp;td_id=1892994&amp;titFF=%E5%AE%8B%E4%BD%93&amp;titFS=12&amp;titTA=left&amp;tn=text_default_580_90&amp;tpr=1436408580717&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1892994&amp;ti=Caused%20by%3A%20android.os.NetworkOnMainThreadException%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95_And&amp;tt=1436408580431.730.848.848" frameborder="0" width="580" allowtransparency="" marginwidth="0" scrolling="no"></iframe>

好久不写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);
 }
}

附:另一篇解决方案

Android 4.1项目:使用新浪微博分享时报:
  android.os.NetworkOnMainThreadException
网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策:

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

1
2
3
4
5
//详见StrictMode文档
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().
detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().
detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

如果正在做的项目不是Android 4.0的是看不到StrictMode类的。我也是用的网上给的com_weibo_android.jar。但是这个jar包下载下来的时候是2.3的,要先转换成Android 4.0的项目,再在分享对应的ShareActivity的onCreate()函数中添加上面的两行代码。这样就不会报这个错误了。

二:使用Thread、Runnable、Handler这三个类:

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

Android 异常 android.os.NetworkOnMainThreadException

最近在实现一个Android下的数据采集的SDK,收集用户使用数据使用HTTP发送到云平台,进行数据分析。但在发送数据时报如下错误: Caused by: android.os.NetworkOnM...
  • a78270528
  • a78270528
  • 2015年07月29日 18:05
  • 2097

Caused by: android.os.NetworkOnMainThreadException错误解决办法(强制主线程做网络请求)

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadExc...
  • u012901683
  • u012901683
  • 2015年11月23日 20:50
  • 278

Retrofit2.0 android.os.NetworkOnMainThreadException解决方法

在使用Retrofit2.0中出现了android.os.NetworkOnMainThreadException异常,代码如下: FamousInfoModel.getInstance(getA...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月17日 16:30
  • 2427

android.os.NetworkOnMainThreadException错误解决办法

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThread 好...
  • x_fei_xia
  • x_fei_xia
  • 2015年09月11日 20:00
  • 151

android studio 主线程中访问网络,遇到android.os.NetworkOnMainThreadException

在android studio中访问网络的时候遇到了如下错误: 08-03 13:22:45.701 9065-9065/com.vrphogame.thyroidapp0802 E/And...
  • u013527937
  • u013527937
  • 2016年08月03日 13:28
  • 3357

Retrofit2遇到android.os.NetworkOnMainThreadException异常

APP中使用Retrofit2,在做下载功能时,惊喜的发现这个android.os.NetworkOnMainThreadException异常,抓到子线程去跑结果还是存在,后面试着把 @Strea...
  • Canra
  • Canra
  • 2017年12月15日 16:24
  • 92

Caused by: android.os.NetworkOnMainThreadException

今天遇到Caused by: android.os.NetworkOnMainThreadException错误,同样的代码在其它工程中却没问题。几番折腾,以下文章解决了问题。特此转载。 转...
  • wave2007
  • wave2007
  • 2015年07月05日 18:16
  • 298

【边做项目边学Android】异常处理:android.os.NetworkOnMainThreadException--多线程问题

一切搞定,以为高枕无忧了,结果还是有问题! log开始报错了,获取更新信息异常!!!debug一下,发现Exception:android.os.NetworkOnMainThreadExcepti...
  • bruce_6
  • bruce_6
  • 2014年09月28日 13:55
  • 1914

AndroidRuntime(1185): android.os.NetworkOnMainThreadException 异常解决

/AndroidRuntime(1185): android.os.NetworkOnMainThreadException 是因为程序在主线程上执行网络访问,所以产生的。 可以降低     ...
  • oemoon
  • oemoon
  • 2013年08月24日 00:55
  • 5072

Android之NetworkOnMainThreadException异常

看名字就应该zhidao
  • mad1989
  • mad1989
  • 2014年05月16日 13:26
  • 141392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Caused by: android.os.NetworkOnMainThreadException错误解决办法
举报原因:
原因补充:

(最多只允许输入30个字)