转:http://blog.csdn.net/wotoumingzxy/article/details/7797295

这个异常大概意思是在主线程访问网络时出的异常。 Android在4.0之前的版本 支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。

那么如何做才能正常运行呢? 请看这里:
例如:  从网络中获取一个Url地址。

    url = AuthUtil.getAuthorizationURL();
if (url == null) {
Toast.makeText(WebViewActivity.this, R.string.auth_url_empty, 3000).show();
}

如果直接写在主线程中的话 在2.x 版本中还是能运行 但是在4.0以后就会出现错误。

网上也有很多相关资料比如说在主线程中添加

    // 详见StrictMode文档
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());

但是

.detectLeakedClosableObjects()  会报错,

也就是说这个方法不用,但是查看源码发现其方法是公共的

   / **
* Detect when an {@link java.io.Closeable} or other
* object with a explict termination method is finalized
* without having been closed.
*
* <p>You always want to explicitly close such objects to
* avoid unnecessary resources leaks.
*/
public Builder detectLeakedClosableObjects() {
return enable(DETECT_VM_CLOSABLE_LEAKS);
}

这个我就有点搞不清楚怎么回事,资历尚浅还不会。哈哈。

所以我就用第二种方法 也就是多线程,异步加载的方式加载数据。

代码如下:

在主函数中发送一个空的消息 :

    new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
url = AuthUtil.getAuthorizationURL();
if (url == null) {
Toast.makeText(WebViewActivity.this, R.string.auth_url_empty, 3000).show();
}
handler.sendEmptyMessage(0);
}
}.start();

在handler中接受到消息 作出相应的处理。

private Handler handler = new Handler() {

		public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
<span style="white-space:pre"> </span>load(url, webView);
break;
}
};
};

这样就解决的这个异常。

有什么不对的地方,请多指教。


2014年10月16日14:15:58

本质上来讲,目前Android开发中,有关网络访问的部分是不可以放到主线程当中了!

android.os.NetworkOnMainThreadException异常 (转)的更多相关文章

  1. android.os.NetworkOnMainThreadException异常

    在android4.0以前,访问网络的代码可以写在UI主线程,但是在android4.0以上就不能在ui主线程中访问网络了,会出现android.os.NetworkOnMainThreadExcep ...

  2. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法

    android.os.NetworkOnMainThreadException 异常的解决的方法. 刚开是把HttpURLConnectionnection 打开连接这种方法放在UI线程里了,可能不是 ...

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

    安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  | ...

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

    Android加载网络图片大致可以分为两种,低版本的和高版本的.低版本比如4.0一下或者更低版本的API直接利用Http就能实现了: 1.main.xml <?xml version=" ...

  5. 【Android 错误记录】android.os.NetworkOnMainThreadException 异常问题

    最近自己学习开发一个小app,想根据网络来判断一些逻辑,但是运行应用时遇到了这个错误 android.os.NetworkOnMainThreadException 后来,查询了一些信息,发现原因就是 ...

  6. android.os.NetworkOnMainThreadException异常如何解决

    android.os.NetworkOnMainThreadException 08-08 17:53:30.635 I/ArticleTable(22461): 添加成功 58 08-08 17:5 ...

  7. 问题记录:android.os.NetworkOnMainThreadException异常

    在MainActivity的主线程中访问网络将会发生异常 查阅资料后发现 Android4.0 以后不允许在主线程进行网络连接

  8. android.os.NetworkOnMainThreadException 异常

    记下来以后备用 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectD ...

  9. 解决发http get请求的时候不成功,出现android.os.NetworkOnMainThreadException的异常

    问题描述:在接游戏sdk的时候,由于游戏要求购买的时候是在主线程里面进行的,但是发http请求是不能在主线程里面发,否则就会出现android.os.NetworkOnMainThreadExcept ...

随机推荐

  1. css 图片 和 文本 的处理

    图片 1.css3已经可以实现 img标签 和 img内图片分开处理的功能了.类似标签的背景图.   https://www.zhangxinxu.com/wordpress/2015/03/css3 ...

  2. 23-25 October in 614

    Practice sort 给定一系列形如 \(A<B\) 的不等关系,判断前 \(k\) 个不等关系是否即可确定 \(n\) 个元素之间的大小顺序:如果不可确定,判断前 \(k\) 个不等关系 ...

  3. Python笔记(十)_迭代器与生成器

    迭代 用for...in来遍历一个可迭代对象的过程就叫迭代 可迭代对象:列表.元组.字典.集合.字符串.生成器 可以使用内置函数isinstance()判断一个对象是否是可迭代对象 >>& ...

  4. 在C#后台使用MD5值对文件进行加

    首先说一下MD5值的概念和来源.MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.M ...

  5. python Condition类(锁)

    Condition(条件变量)通常与一个锁关联.需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例. 不理解锁的,请看上一条 ...

  6. 正则sub的使用

    import re # unicode 编码匹配范围[u4e00-u9fa5] pattern = re.compile('(\w+) (\w+)') s = 'hello 123,hello 456 ...

  7. urllib库爬取实例

    from urllib import request import random def spider(url): user_agent_list = [ "Mozilla/5.0 (Win ...

  8. Dubbo 系列(07-4)集群容错 - 集群

    BDubbo 系列(07-4)集群容错 - 集群 [toc] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 相关文档推荐: Dubbo 集群容错 - 实战 D ...

  9. redis缓存架构-01-缓存架构方案

    缓存实现架构 1.小型电商-页面静态化(基于url rewrite) 2.大型电商

  10. [fw]error: aggregate value used where an integer was expected

    一個自訂struct型態的變數,若想要轉換為unsigned,直接使用cast,gcc(version 4.4.3)編譯會回報錯誤. 例如: struct _test { unsigned hour ...