Android Socket编程报错android.os.NetworkOnMainThreadException

MaxEnt软件的下载与安装 1、下载网站:http://lucky-boy.ys168.com/ (这是之前在网上搜到的,里面有许多软件安装包,感谢网页主的资源共享,违权必删) 阅读详情

在学习socket编程中,在主线程中初始化socket实例,创建子线程处理获取返回数据,利用handler返回消息给主线程,可是在运行的过程中,程序出错,错误信息如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sockettext/com.example.sockettext.PayActivity}: android.os.NetworkOnMainThreadException

Caused by: android.os.NetworkOnMainThreadException

经过查找相关资料了解到,造成这样的错误原因是代码不符合Android规范,如果把socket访问方式改为异步操作就不会出现在4.0上访问出现 android.os.NetworkOnMainThreadException异常,所以解决这个问题的方法有两个:

1、在异步操作中处理socket

2、从 Android 2.3 开始提供了一个新的类 StrictMode,该类可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者改进程序,使主线程处理 UI 和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞。

所以可以在主线程中,setContent()后面加上一段代码


if (android.os.Build.VERSION.SDK_INT > 9) {
   StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
            .detectDiskReads().detectDiskWrites().detectNetwork() 
            .penaltyLog().build()); 
 
   StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
            .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath() 
            .build());
  }

18|AI 辅助精准测试:让平台会解释、会总结、会推荐 本文介绍 AI 在精准测试平台中的落地方式,包括变更摘要、风险解释、补测建议和报告总结。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。从报告中提取变更文件、未覆盖行、推荐用例。拼成结构化 JSON。让 AI 生成 200 字质量摘要。把摘要展示在报告顶部。读完本文后,可以复制下面的 Prompt,让 AI 生成一个报告总结练习。你是一名 AI 应用开发专家和测试架构师。 阅读详情

相关推荐

骗分导论 CSP、NOIP、蓝桥杯、PAT、USACO等竞赛的算法骗分技巧 轻松省三

问题来了,那么多座桥,炸一座就破坏岛屿的联系,可能性微乎其微(除非特别设计数据)。它们的价值极大,不仅能初步帮你检验程序的对错,而且,如果你不会做这道题,你就可以直接输出样例!在OI考试中最后难的题数据最后的几个,他们往往不会创造新的数据,此时就可以直接输出最后几个数据了。需要运用《骗分导论》第3章中学到的知识,先写出朴素算法,然后造一些数据,可能就会发现规律。有些时候,问题的答案可能很有特点:对于大多数情况,答案是一样的。据说,在NOIP2013中,有人最后一题不会,愤然打了个随机数,结果得了。

星卯教育-信奥教练tony 6403

android异常 android.os.NetworkOnMainThreadException

android4.2网络访问异常 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test_application/com.example.test_application.WebPicActivity}: android.os.NetworkOnMainThreadExceptio...

yangchunhe09的专栏 233

Altium Designer操作技巧(4)——如何利用嘉立创EDA来输出3D封装到AD封装库?

本文介绍了利用嘉立创EDA和FreeCAD软件为PCB元件添加3D模型的方法。首先在嘉立创EDA中搜索元件编号并导出3D模型,然后使用FreeCAD删除3D模型中的PCB基板部分,最后将处理后的3D模型导入PCB封装库并更新到PCB设计中。文章详细讲解了每个步骤的操作流程,包括模型导出、基板删除、位置调整等关键环节,并提供了解决常见问题的方法。通过这种方法,电子工程师可以快速获得元器件的3D模型,提高PCB设计的准确性。

u012526819的博客 2583

Android 异常 android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException 安卓 主线程请求异常

qq_36159185的博客 1248

24位ADC的精度陷阱:为什么你的ADS1232实测性能不达标?

本文深入探讨了24位ADC芯片ADS1232在实际应用中性能不达标的原因,揭示了高精度ADC性能依赖周边电路设计的关键问题。通过分析电源系统、参考电压稳定性、PCB布局等常见陷阱,提供了优化方案和调试技巧,帮助工程师充分发挥ADS1232的潜力,实现接近理论值的测量精度。

weixin_28285943的博客 405

你不必懂AI,但必须会用AI:写给所有焦虑中的职场人

AI时代不必焦虑学技术,关键在于用AI解决实际问题。文章指出,99%的人只需成为AI使用者而非建造者,核心竞争力在于结合业务痛点运用AI工具提升效率。与其盲目学习工具,不如梳理工作流程,识别可优化环节,让AI赋能重复性、标准化任务。行业经验与AI工具的结合才是真正的职场护城河。建议从具体工作场景出发,寻找匹配的AI解决方案,迈出应用第一步。

hundred98的博客 715

android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException 第一次看到这异常,字面意思是说:在主线程中的网络异常。然后我就去了解了下这个异常,先看看官方的说明: ublic class NetworkOnMainThreadException extends RuntimeException java.lang.Object ? java.lang.Thro...

探索丶挑战丶突破 3万+

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1336

android.os.networkonmainthredexception,android.os.NetworkOnMainThreadException的解决方案

06-24 18:04:36.857: E/AndroidRuntime(22251): FATAL EXCEPTION: main06-24 18:04:36.857: E/AndroidRuntime(22251): android.os.NetworkOnMainThreadException06-24 18:04:36.857: E/AndroidRuntime(22251): a...

weixin_42364780的博客 1880

GlobalPlatform Technology Secure Channel Protocol ‘03‘ 标准 - 安全通道协议简介

按照GlobalPlatform Technology Secure Channel Protocol '03' (SCP03)标准,描述了如何利用S-MAC,S-RMAC,S-ENC进行安全通信的过程。

mmmx777的专栏 6091

【IPAM】Netbox docker模式版本升级

NETBOX 是一个开源的网络资源管理系统,主要用于管理 IP 地址、机架、设备、接口等网络资源信息。下面是 NETBOX 的功能、优点和缺点的详细介绍。

u012153104的博客 1329

Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException

Android 客户端 TCP socket出现 android.os.NetworkOnMainThreadException  这个问题主要是把网络操作放在了主线程当中,如果将套接字初始化放于一个继承thread的类当中也是算在主线程,如public class ReceiveThread extends Thread{ Socket socket; InputStream i

ke243582423的博客 732

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 648

解决NetworkOnMainThreadException

选择了android2.3以后的开发包(比如4.0的),再主线程建立socket连接的时候,会报错 NetworkOnMainThreadException 或者是使用android2.3之前的开发包,但是要运行在4.0以上的版本也会报这样的错误。在网上查了一下,我总结了两种方法, 方法一:直接忽视,强制使用(强烈不推荐,但是修改简单) 在MainActivity文件的

Linux灰灰的云深无迹 1743

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

写Android程序时遇到android.os.NetworkOnMainThreadException错误怎么办?

今天写了一个安卓程序时,涉及到Socket、ServerSocket编程,程序报错,如下图: 经过资料的收集,我了解到,在Android 4.0以上,网络连接不能放在主线程上,不然就会报错android.os.NetworkOnMainThreadException。但是4.0下版本可以不会报错。 解决方案: 1.可以再Activity的onCreate()方法中加入这样一段代码,适用于...

qq_42159042的博客 227

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android.os.NetworkOnMainThreadException异常如何解决

android.os.NetworkOnMainThreadException 08-08 17:53:30.635 I/ArticleTable(22461): 添加成功 58 08-08 17:53:30.648 W/System.err(22461): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode

小崔的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android项目socket编程时遇到的问题

出处:http://blog.csdn.net/cxllyg/article/details/7460187?reload#reply 最近在玩android,学习到网络这一部分,写了一个电脑本机做服务器,模拟器做客户端的socket通信程序,但手机模拟器客户端就是连不上电脑的服务器端,执行到Socket socket=new Socket("xx.xx.xxx.xxx",8888);就抛异常。

kangli的专栏 1189

socket(http或者其他网络请求)在主线程中使用会报错:NetworkOnMainThreadException

android的UI主线程不允许有耗时的操作,例如网络请求等,否则android会抛出异常

stay hungry,stay foolish 1431

Android Socket编程学习笔记

度娘给出的描述: 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。        网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Sock

Mr梵谷的专栏 8557

Android的socket编程注意点

解决了在Android 2.3下能够正常连接socket,而Android 4.4下却崩溃的问题。 首先连接的方法为socket = new Socket(); SocketAddress socAdd = new InetSocketAddress("192.168.23.1", 30000); socket.connect(socAdd, 5000); //2.3正常4.4出错2.3下

Alex921184683的专栏 922

android 网络编程注意,Android socket网络编程要注意

最近在玩android,学习到网络这一部分,写了一个电脑本机做服务器,模拟器做客户端的socket通信程序,但手机模拟器客户端就是连不上电脑的服务器端,执行到Socket socket=new Socket("xx.xx.xxx.xxx",8888);就抛异常。我又自己写了一个普通的Java客户端,测试能连上服务器端。所以代码应该没有问题,问题就在于手机模拟器。同学的电脑上装了2.0的androi...

weixin_35457969的博客 244

java建立socket连接,如何建立socket连接

今天测试了一下最佳评论里面的代码,发现居然报错了!!!Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket不能在主线程调用网络,只能采用异步方式。而且,这个问题出现在Andriod 4.0以上:Android在4.0之前的版本 支持在主线程中访问网络,4.0以后不支持。解决方法:1.通过新的线程访问网络然后,...

weixin_32096149的博客 670

Android socket和Tomcat等网络连接不上问题解决方案

最近在玩android,学习到网络这一部分,写了一个电脑本机做服务器,模拟器做客户端的socket通信程序,但手机模拟器客户端就是连不上电脑的服务器端,执行到Socket socket=new Socket("xx.xx.xxx.xxx",8888);就抛异常。我又自己写了一个普通的Java客户端,测试能连上服务器端。所以代码应该没有问题,问题就在于手机模拟器。同学的电脑上装了2.0的androi

cxllyg的专栏 9031

执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法...

       首先,确认你的android版本是4.0之后再用此方法解决,因为在4.0之后在主线程里面执行Http请求才会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。Android在4.0之前的版本支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。         解决方法:         1.在 onCreate() ...

weixin_34100227的博客 716

Android手机与PC端进行通信

前阵子研究短信窃听器的时候,碰到一个问题,需要手机和电脑PC之间进行通信,互相传输数据,之间碰到的问题写出来,方便大家共享,减少查找资料的时间。

liuweiweiwei的专栏 3534

android的socket的问题。。。求救啊

服务端: import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Mytimeserver { public static void main(String[] args){ new S

110
上一篇: android 声音的调用
下一篇: android.os.NetworkOnMainThreadException
走丢的猫
博客等级 码龄15年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值