【Android开发】解决安卓android.os.NetworkOnMainThreadException

简介:

解决android socket编程出现的Caused by: android.os.NetworkOnMainThreadException

本文转自:http://blog.csdn.net/debutent/article/details/8708127

 

以前我的socket通信的代码运行在android2.3.5手机上一点问题没有,现在入手了小米2S(系统android4.1.1)后,发现出现如下问题,期间server端打开后异常关闭,在logcat中查看到了Caused by: android.os.NetworkOnMainThreadException错误,在http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception找到了答案,要在MainActivity.javasetContentView(R.layout.activity_main)后加入以下代码

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

并在文件头加入,import android.os.StrictMode

问题解决

 

对于什么是StrictMode,可以参考http://www.cnblogs.com/zelos/archive/2011/02/27/1966403.html

 

还有一篇文章解释的更清晰:

android.os.NetworkOnMainThreadException异常,经过查文档,原来是4.0系统不允许主线程(UI线程)访问网络,因此导致了其异常。在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。

一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码:

//详见StrictMode文档

StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

如果正在做的项目不是Android 4.0的是看不到StrictMode类的。

二:使用ThreadRunnableHandler这三个类:

public void onCreate(Bundle savedInstanceState) 
{   super.onCreate(savedInstanceState);
    this.setContentView(R.layout.share_mblog_view);
     newThread(runnable).start();
}
Handler handler=newHandler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data=msg.getData();
String val= data.getString("value");
Log.i("mylog","请求结果为-->" +val);
}
}
Runnable runnable=newRunnable(){
@Override
public void run() {
////TODO: http request.//
Message msg =newMessage();
Bundle data=newBundle();
data.putString("value","请求结果");
msg.setData(data);
handler.sendMessage(msg);
}
}

开线程处理关于网络的事物,然后用handler发送消息来处理更新UI

自己走了不少弯路。

相关文章
|
4天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
6天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
8天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
6天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
7天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
19 2
|
8天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
9天前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
13天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
34 0
Vanilla OS:下一代安全 Linux 发行版
|
15天前
|
人工智能 安全 Linux