【转】android程序连接网络出现android.os.NetworkOnMainThreadExceptionat
2012-11-07 14:37
561 查看
错误:
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
......
原因:是涉及到url操作的时候,访问网络不能在主程序中运行
解决:参考【/article/3943625.html、http://kb.cnblogs.com/a/2311659/】
在Activity类的onCreate方法中添加下面的代码,线程的方法还没测试。
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中的违规等。
第二条语句设置了虚拟机的一组监控策略,参数一致,因此不再赘述。
这样,在保证了网络和磁盘访问受控之后,主线程就允许我们对网络资源进行访问。
来自http://blog.csdn.net/dragon08/article/details/7666172
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
......
原因:是涉及到url操作的时候,访问网络不能在主程序中运行
解决:参考【/article/3943625.html、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中的违规等。
第二条语句设置了虚拟机的一组监控策略,参数一致,因此不再赘述。
这样,在保证了网络和磁盘访问受控之后,主线程就允许我们对网络资源进行访问。
来自http://blog.csdn.net/dragon08/article/details/7666172
相关文章推荐
- android网络连接经常出现Timeout,NetworkOnMainThreadException问题,手动浏览器访问web地址正常
- 解决android连接网时出现“android.os.NetworkOnMainThreadException”异常的方法
- 解决android程序中出现android.os.NetworkOnMainThreadException
- 在Activity中启动一个网络连接遇到android.os.NetworkOnMainThreadException
- Android连接网络异常:android.os.NetworkOnMainThreadException
- 关于连接网络时抛出“android.os.NetworkOnMainThreadException”异常问题
- Android网络程序出现HttpHostConnectException及NetworkOnMainThreadException解决方法
- android程序连接网络出现android.os.NetworkOnMainThreadEx
- Android 3.0上访问出现 android.os.NetworkOnMainThreadException
- 老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException
- HTTP连接出错:android.os.NetworkOnMainThreadException
- 问题描述: android.os.NetworkOnMainThreadException异常(不要在主线程访问网络资源)
- android 4.0后请求网络android.os.NetworkOnMainThreadException
- 如何解决安卓网络主线程异常的问题:Caused by: android.os.NetworkOnMainThreadException [duplicate]
- android studio 主线程中访问网络,遇到android.os.NetworkOnMainThreadException
- Android 3.0以上 访问WebService 出现 android.os.NetworkOnMainThreadException异常
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- android studio 主线程中访问网络,遇到android.os.NetworkOnMainThreadException
- 手把手教你解决android网络请求问题:android.os.NetworkOnMainThreadException
- 出现Android.os.NetworkOnMainThreadException 错误