文档章节

android.os.NetworkOnMainThreadException如何解决?

今日竹石
 今日竹石
发布于 2014/05/06 13:50
字数 649
阅读 1737
收藏 1

error如下:

05-06 11:38:43.104: D/(23666): android.os.NetworkOnMainThreadException

05-06 11:39:07.800: D/GestureDetector(23666): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 5 mFalseSizeCnt:0

05-06 11:39:07.800: I/QCNEA(23666): |NIMS| getaddrinfo: hostname www.baidu.com servname NULL numeric 4 appname 

05-06 11:39:07.800: W/System.err(23666): android.os.NetworkOnMainThreadException

05-06 11:39:07.810: W/System.err(23666): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)

05-06 11:39:07.810: W/System.err(23666): at java.net.InetAddress.getAllByName(InetAddress.java:214)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)

05-06 11:39:07.810: W/System.err(23666): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)

05-06 11:39:07.820: W/System.err(23666): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)

05-06 11:39:07.830: W/System.err(23666): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)

05-06 11:39:07.830: W/System.err(23666): at com.example.networkconnectiondemo.MainActivity.onClick(MainActivity.java:76)

05-06 11:39:07.840: W/System.err(23666): at android.view.View.performClick(View.java:4367)

05-06 11:39:07.840: W/System.err(23666): at android.view.View$PerformClick.run(View.java:17984)

05-06 11:39:07.840: W/System.err(23666): at android.os.Handler.handleCallback(Handler.java:725)

05-06 11:39:07.840: W/System.err(23666): at android.os.Handler.dispatchMessage(Handler.java:92)

05-06 11:39:07.840: W/System.err(23666): at android.os.Looper.loop(Looper.java:137)

05-06 11:39:07.840: W/System.err(23666): at android.app.ActivityThread.main(ActivityThread.java:5297)

05-06 11:39:07.840: W/System.err(23666): at java.lang.reflect.Method.invokeNative(Native Method)

05-06 11:39:07.840: W/System.err(23666): at java.lang.reflect.Method.invoke(Method.java:511)

05-06 11:39:07.840: W/System.err(23666): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)

05-06 11:39:07.840: W/System.err(23666): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)

05-06 11:39:07.840: W/System.err(23666): at dalvik.system.NativeStart.main(Native Method)

我的代码如下:

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.activity_main_btn:

try

{

// Toast.makeText(this, "I'm here!", Toast.LENGTH_LONG).show();

/* 获取url并获取数据 */

// 清空显示内容的文本框

tvShowContent.setText("");

// 获取用户输入的url

URL url = new URL(etInputUrl.getText().toString());

//URL url = new URL("http://www.baidu.com");

// 声明打开链接

URLConnection urlConnection = url.openConnection();

// 获取网页数据

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(urlConnection.getInputStream()));

// 逐行读取时的字符串

String line = "";

// 读取数据

while ((line = bufferedReader.readLine()) != null)

{

Message message = new Message();

message.obj = line;

message.what = 0;

// 将数据显示在界面上

handler.sendMessage(message);

}


} catch (Exception e)

{

e.printStackTrace();

Log.d("", e.toString());

}

break;

。。。。。。。。。

通过debug可以发现在执行

// 获取网页数据

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(urlConnection.getInputStream()));

这段代码时报的错。

那么如何修改呢?

根据api文档介绍,只要在调用这段代码之前加上如下代码即可:

StrictMode

.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads().detectDiskWrites()

.detectNetwork() // or .detectAll() for all

// detectable problems

.penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.detectLeakedClosableObjects().penaltyLog()

.penaltyDeath().build());


© 著作权归作者所有

共有 人打赏支持
今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
加载中

评论(2)

今日竹石
今日竹石

引用来自“mcloud”的评论

网络操作不要网络操作不要放主线程撒, 另外开一个线程做
ok,谢谢哦,这里只是一个简单的demo
mcloud
mcloud
网络操作不要网络操作不要放主线程撒, 另外开一个线程做
android.os.NetworkOnMainThreadException异常处理

第一种: public void onCreate(Bundle savedInstanceState) { 在android 2.3上设计的下载程序,在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,原来在4.0中,访问网......

蒲成林
2013/12/01
0
0
异常:android.os.NetworkOnMainThreadException

Android 4.1项目:使用新浪微博分享时报:   android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求...

IT妖姬
2014/04/18
0
0
解决android.os.NetworkOnMainThreadException

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误,查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Htt...

JayPark不作死
2014/03/04
0
0
异常:android.os.NetworkOnMainThreadException

Android 4.1项目:使用新浪微博分享时报:   android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求...

tfc
2013/01/04
0
0
安卓问题总结( android.os.NetworkOnMainThreadException异常)

问题描述: android.os.NetworkOnMainThreadException异常(不要在主线程访问网络资源) 问题分析: 造成这种异常的原因是安卓版本问题(仔细研究错误原因是代码不符合Android规范),网上搜...

火龙战士
2015/01/30
0
3

没有更多内容

加载失败,请刷新页面

加载更多

一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
今天
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部