android程序连接网络出现android.os.NetworkOnMainThreadEx
android程序连接网络出现android.os.NetworkOnMainThreadEx
错误:
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) ......
原因:是涉及到url操作的时候,访问网络不能在主程序中运行
解决:参考【http://geeksun.iteye.com/blog/1447708、http://kb.cnblogs.com/a/2311659/】
在Activity类的onCreate方法中添加下面的代码,线程的方法还没测试。
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());}
Android的官方文档给出了这个类设置的目的: StrictMode是一个系统提供的开发工具,用以检测在开发过程中因为偶然的事故从而造成的系统潜在的问题,进而提示开发者对其进行修复。
StrictMode通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的, 它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅,提升响应度和用户体验。
显然,大多数初学者在进行网络开发时,会选择将访问网络的代码直接放到主进程中,由于和主进程的首要工作——UI交互——相矛盾,因此,必须设置一定的检测机制,以保证系统运行的流畅,所有的异常都可以被检测。
public static voidsetThreadPolicy(StrictMode.ThreadPolicy policy) 这个方法允许我们为当前应用设置一组线程运行策略机制。其中的参数是一个策略组(即一组策略)。 public static finalclass StrictMode.ThreadPolicy.Builder() Builder是StrictMode中内嵌类ThreadPolicy的一个内嵌类,在此我们调用了它的默认构造方法。 detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()
通过这种方式,我们设置了一组监控模式,我们要检测磁盘的读写,网络的访问, Log中的违规等。
第二条语句设置了虚拟机的一组监控策略,参数一致,因此不再赘述。 这样,在保证了网络和磁盘访问受控之后,主线程就允许我们对网络资源进行访问。
转载于:https://www.cnblogs.com/liuhg/p/4036562.html
android程序连接网络出现android.os.NetworkOnMainThreadEx相关推荐
- 【转】android程序连接网络出现android.os.NetworkOnMainThreadExceptionat
错误: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwo ...
- android 打开网络pdf,Android 打开网络上pdf文件
1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...
- android linux网络连接,Android和Linux服务器之间的TCP连接
我正在编写一个代码,需要每秒从Android移动设备向台式计算机(linux服务器)发送数据.由于数据经常发送,通过Http命中无法实现(因为会消耗时间),所以Tcp通信似乎是更好的选择,因为andr ...
- android无网络状态栏,Android中检查网络连接状态的变化,无网络时跳转到设置界面...
在AndroidManifest.xml中加一个声明 1. 2. 3. 4. 5. NetCheckReceive.java文件如下 1.import android.content.Broadcas ...
- Android --- 5G网络,android系统开发教程
Android - 5G网络 连接5G网络 检测5G网络 进行流量计费的判断 进行带宽估测 Android - 5G网络 ======================================= ...
- android 链接网络成功,Android之网络连接判断是否成功
最近工作工程中遇到一个问题.问题很简单,这里做个笔记,Android进行网络联网的一些操作时,经常会对网络是否已经连接成功进行判断.我们通常会对wifi和移动网络进行判断,我们需要判断网络设备是否开启 ...
- android 使用网络字体,android使用指定的字体
1.Android提供三种字体:"Sans","serif"和"monospace".采用android:typeface,例如androi ...
- android 检测网络ftp,Android端与Android端利用WIFI进行FTP通信
一.客户端通信工具类: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...
- android 提示网络差,Android手机直播之差网络处理和发送
今天为大家介绍Andriod手机直播流程中的差网络处理和发送过程,图玩智能为企业提供直播平台二次开发,搭建更加完善的直播系统,欢迎随时咨询www.toivan.com. 差网络处理 好的网络下视音频能 ...
- android搭建网络框架,Android 搭建MVP+Retrofit+RxJava网络请求框架(三)
上一篇中主要是将mvp+rxjava+retrofit进行了结合,本篇主要是对mvp框架的优化:建议先去看上一篇:Android 搭建MVP+Retrofit+RxJava网络请求框架(二) 针对vi ...
最新文章
- Xcode快捷键及代码块
- 基于路由器网络诊断步骤和故障排除技巧
- Kafka将消息发往内存缓冲区
- 百度视频携手神策数据 为用户精准推送短视频内容
- java 重试_Java重试机制修改
- Oracle数据库的trigger(触发器)
- python机制_python异常机制个人理解(参考网上资料)
- java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...
- 阿里修冶:微服务拆分之道
- I NEED A OFFER!(HDU-1203)
- 微型计算机中的80586指,一级B考试模拟试题-套,DOS版本:6.0
- python中for循环缩进_Python基础- 缩进,选择和循环
- 机器狗病毒样本 穿透冰和点还原卡
- 当前最新it技术了解
- RFC1867协议介绍
- 陈佩斯曾受邀喜剧综艺:被酬劳吓的恍惚好几天
- tree traversal (树的遍历) - preorder traversal (前序遍历)
- Js出库入库数量变化
- iptable使用笔记
- 【修复H5农场复利】黄金家园农场理财游戏源码Thinkphp开发 带商城仓库商店模块
热门文章
- 论文笔记《Neural Machine Translation by Jointly Learning to Align and Translate》
- ios12后,获取不到WIFI(SSID)相关信息
- 白话文:几个例子马上看懂typescript基础类型
- 边沿检测电路设计verilog
- 使用gentoo做构建嵌入式linux时遇到的问题两则[原]
- Params属性的用法 (beginner)
- Ubuntu Server 18.04 安装
- 1月15 remap 标签的使用(源代码成功运行,但通信有问题,可能是remap的问题)
- 第四季-专题5-内核模块开发
- Linux--shell编程原理--03