昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003。第一感觉就是好卡,果断刷机。以前是Android 2.3的系统。回来刷成了4.4。

好了,问题来了。在我用手机测试我们的APP的时候,抛出一个如题的异常:android.os.NetworkOnMainThreadException

第一次看到这异常,字面意思是说:在主线程中的网络异常。然后我就去了解了下这个异常,先看看官方的说明:

public class

NetworkOnMainThreadException

extends RuntimeException

java.lang.Object
   ↳ java.lang.Throwable
     ↳ java.lang.Exception
       ↳ java.lang.RuntimeException
         ↳ android.os.NetworkOnMainThreadException

Class Overview


The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. See the document Designing for Responsiveness.

Also see StrictMode.

所以事情就很清楚了。一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。

解决方案有两个,一个是使用StrictMode,二是使用线程来操作网络请求。

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

if (android.os.Build.VERSION.SDK_INT > 9) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);
}

第二种方法就是我使用的方法也是我要推荐的方法,将请求网络资源的代码使用Thread去操作。 在Runnable中做HTTP请求,不用阻塞UI线程。

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main_view);new Thread(runnable).start();
}Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Bundle data = msg.getData();String val = data.getString("value");Log.i(TAG,"请求结果:" + val);}
}Runnable runnable = new Runnable(){@Overridepublic void run() {// TODO: http request.Message msg = new Message();Bundle data = new Bundle();data.putString("value","请求结果");msg.setData(data);handler.sendMessage(msg);}
}

上面是比较通用的方法,我的代码:

// Android 4.0 之后不能在主线程中请求HTTP请求new Thread(new Runnable(){@Overridepublic void run() {cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);imageView.setImageDrawable(cachedImage);}}).start();

好了今天这个破事就到这里,其实android开发就这么点破事。关于其他破事,见专栏:

更多Android开发的破事,请看专栏:《Android开发那点破事》

【Android开发那点破事】解决android.os.NetworkOnMainThreadException相关推荐

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

    昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时 ...

  2. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  3. Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android

    转载:http://www.android100.org/html/201507/15/165084.html Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈andro ...

  4. Android开发— 2016_最流行的Android组件、工具、框架大全(二)

    2019独角兽企业重金招聘Python工程师标准>>> 泡在网上的日子 首页 代码 话题 问答 标签 关于 登录注册 首页 › 安卓开发 › android开发 Android开发- ...

  5. Android开发-AMD平台如何使用Android studio自带模拟器

    Android开发-AMD平台如何使用Android studio自带模拟器 前言 AMD开启虚拟化VT win10专业版开启 win10家庭版开启 创建Android模拟器 前言 现在Android ...

  6. Android开发入门与实战之Android应用安装卸载

    当一个Android开发者完整的开发完毕一个程序应用软件结束后要进行软件测试,这就是软件测试员的来历,那么在这之前,要进行Android开发应用的安装与卸载. Android开发入门与实战之Andro ...

  7. Android 开发艺术探索——第十章 Android的消息机制

    Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机 ...

  8. Xamarin.Android开发及常见问题的解决

    一.Xamarin.Android开发环境的搭建 (一)所需组件 1.VS2013(VS2010以上即可) 2.JDK(http://www.oracle.com/technetwork/java/j ...

  9. 阿里P7面试官告诉你:3-5年以上的Android开发如何深入进阶?Android中高级开发必须掌握哪些?

    前言 Android确实不是当年盛况,已经不再像前几年前那么火爆.一个新行业如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点,然后再下降,最后再趋近一个平稳的值 ...

最新文章

  1. 美团_cc城市自定义
  2. 0213互联网新闻 | IBM宣布推出新的混合云产品;Instagram正在内测网页版聊天服务...
  3. mysql qt自增_mysql自增设置
  4. java获取jsp对象的属性_java-从jsp el中的对象获取布尔属性
  5. java二嗨租车项目_Java入门第二季6-1租车项目代码
  6. postgresql编译安装
  7. Android 10如何增强移动安全性
  8. 天正多条线段长度lisp下载_预习丨人教版六年级数学(上册)全册知识要点梳理,可下载...
  9. Android-多线程AsyncTask
  10. Linux上vi(vim)编辑器使用教程
  11. 云创大数据荣获“南京实体经济十大优秀企业”
  12. H5和微信小程序直播开发
  13. C# 替换Word文档中的书签内容【详细步骤】
  14. Fbinst增强版 命令详解
  15. 用C语言写个sin和cos程序,C语言sin和cos函数的实现
  16. 气凝胶产业链都有?-供应银纳米粒子修饰碳球/石墨烯复合气凝胶/磷钨杂多酸修饰ZrO_2气凝胶/柠檬酸修饰纤维素气凝胶定制
  17. java 内存回收参数_JVM内存模型及垃圾回收的研究总结
  18. JS 格林威治时间格式(GMT)与普通时间格式的互相转换
  19. numpy 三角函数 sin()、cos()、tan() 反三角函数arcsin,arccos,arctan numpy.degrees()
  20. 计算机考试彩虹云朵,抖音王源彩虹云朵歌曲歌词完整版

热门文章

  1. excel不显示0_Excel表格技巧—用箭头标记Excel表格中数据增减的方法
  2. 光标变成黑色怎么解决
  3. TeXLive 2020 下载与安装
  4. 压缩解压和tar命令
  5. os在python中是什么意思_import os在python中有哪些意思
  6. EXCEL如何快速【选中】或【跳到】当前列的最后一个数据?
  7. 自媒体视频采集工具,批量采集视频素材
  8. https的相关知识
  9. php平方厘米,将cm²换算为sqmi (平方厘米换算为平方英里(美国))
  10. 如何使用 pyqt 实现 Groove 音乐播放器