当前位置: 首页 > news >正文

android.os.NetworkOnMainThreadException

问题

android.os.NetworkOnMainThreadException

详细问题

核心代码如下:

import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;public class HomeActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);try {getData();} catch (IOException e) {e.printStackTrace();}}private List<MyDataType> getData() throws IOException {String apiUrl = "http://api-url";URL url = new URL(apiUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod("GET");// 获取响应代码int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {// 读取响应内容BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 将响应内容转换为Weather对象列表(这里的实现取决于你的服务端返回的数据结构)List<MyDataType> dataList = parseResponse(response.toString());return dataList;} else {// 处理错误情况System.out.println("HTTP request failed with code: " + responseCode);return null;}}// 解析响应内容,将其转换为Weather对象列表private static List<MyDataType> parseResponse(String response) {// 这里需要根据实际情况解析返回的数据,将其转换为Weather对象列表// 请根据你的实际返回数据结构进行实现// 示例实现可能需要使用 JSON 解析库(如 Jackson、Gson)来处理 JSON 数据return null;}
}

控制台报错信息如下:

2024-01-14 11:57:54.617 12108-12108/com.example.assistingagriculture E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.example.assistingagriculture, PID: 12108android.os.NetworkOnMainThreadExceptionat android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1605)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116)at java.net.SocketOutputStream.write(SocketOutputStream.java:161)at com.android.okhttp.okio.Okio$1.write(Okio.java:78)at com.android.okhttp.okio.AsyncTimeout$1.write(AsyncTimeout.java:157)at com.android.okhttp.okio.RealBufferedSink.flush(RealBufferedSink.java:222)at com.android.okhttp.internal.http.Http1xStream.finishRequest(Http1xStream.java:163)at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:748)at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:622)at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475)at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)at com.example.assistingagriculture.HomeActivity.getNearestLongitudeAndLatitude(HomeActivity.java:117)at com.example.assistingagriculture.HomeActivity.lambda$requestLocation$0$com-example-assistingagriculture-HomeActivity(HomeActivity.java:79)at com.example.assistingagriculture.HomeActivity$$ExternalSyntheticLambda1.onSuccess(Unknown Source:4)at com.google.android.gms.tasks.zzn.run(com.google.android.gms:play-services-tasks@@17.2.0:4)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7656)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2024-01-14 11:57:54.627 12108-12108/? I/Process: Sending signal. PID: 12108 SIG: 9

解决方案

步骤1、在项目目录\app\src\main\AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET"/>

具体操作如下图所示:
在这里插入图片描述

解释:数据请求设计网络访问,需要为项目配置网络权限

步骤2、对于上述代码修改,具体修改如下:

import android.os.AsyncTask;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;public class HomeActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);// 此处需修改,添加如下行代码 作用:启动异步任务new GetDataAsyncTask().execute(); }// 此处需修改,添加如下类代码 作用:构造异步任务类private class GetDataAsyncTask extends AsyncTask<Void, Void, List<MyDataType>> {@Overrideprotected List<MyDataType> doInBackground(Void... voids) {try {return getData();} catch (IOException e) {e.printStackTrace();return null;}}@Overrideprotected void onPostExecute(List<MyDataType> result) {// 在UI线程中处理获取到的数据if (result != null) {// 处理数据} else {// 处理错误情况}}}private List<MyDataType> getData() throws IOException {String apiUrl = "http://api-url";URL url = new URL(apiUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod("GET");// 获取响应代码int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {// 读取响应内容BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));StringBuilder response = new StringBuilder();String line;while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 将响应内容转换为Weather对象列表return parseResponse(response.toString());} else {// 处理错误情况System.out.println("HTTP request failed with code: " + responseCode);return null;}}// 解析响应内容,将其转换为Weather对象列表private static List<MyDataType> parseResponse(String response) {// 实现解析逻辑return null;}
}

问题原因

这个错误是由于笔者在主线程(UI线程)上进行了网络操作,而Android不允许在主线程上执行耗时的网络操作,因为这可能会导致应用界面的卡顿。

解决方案

将网络操作移到后台线程上执行即可。使用异步任务 (AsyncTask) 或者 Thread 来执行网络请求,将网络请求放在 doInBackground 方法中。

参考文献

How can I fix ‘android.os.NetworkOnMainThreadException’?

部分内容参考chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
请添加图片描述

相关文章:

android.os.NetworkOnMainThreadException

问题 android.os.NetworkOnMainThreadException详细问题 核心代码如下&#xff1a; import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja…...

Java生成四位数随机验证码

引言&#xff1a; 我们生活中登录的时候都要输入验证码&#xff0c;这些验证码是为了增加注册或者登录难度&#xff0c;减少被人用脚本疯狂登录注册导致的一系列危害&#xff0c;减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号 本次实践&#xff1a;生成这样的…...

编程探秘:Python深渊之旅-----数据可视化(八)

客户提出了对数据报告和图表的具体要求&#xff0c;这使得团队需要快速掌握数据可视化的技巧。派超决定深入了解 Python 中的数据可视化工具。 派超&#xff08;兴奋地&#xff09;&#xff1a;我们有机会做些真正酷炫的数据报告了&#xff01;我听说 Python 有很棒的图表库。…...

上海亚商投顾:创业板指冲高回落 光伏、航运股逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指1月12日冲高回落&#xff0c;创业板指午后跌近1%。北证50指数跌超6%&#xff0c;倍益康、华信永道、众诚科…...

Python3 中常用字符串函数介绍

介绍 Python 中有几个与 字符串数据类型相关的内置函数。这些函数让我们能够轻松修改和操作字符串。我们可以将函数视为在代码元素上执行的操作。内置函数是在 Python 编程语言中定义的&#xff0c;并且可以随时供我们使用的函数。 在本教程中&#xff0c;我们将介绍在 Pytho…...

Python - 深夜数据结构与算法之 AVL 树 红黑树

目录 一.引言 二.高级树的简介 1.树 2.二叉树 3.二叉搜索树 4.平衡二叉树 三.AVL 树 ◆ 插入节点 ◆ 左旋 ◆ 右旋 ◆ 左右旋 ◆ 右左旋 ◆ 一般形式 ◆ 实际操作 ◆ 总结 四.红黑树 ◆ 概念 ◆ 示例 ◆ 对比 五.总结 一.引言 前面我们介绍了二叉树、二叉…...

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布…...

C#属性(Property)

文章目录 一、C#属性&#xff08;Property&#xff09;&#xff1f;二、属性的用法总结 一、C#属性&#xff08;Property&#xff09;&#xff1f; C#属性&#xff08;Property&#xff09;是一种访问器&#xff08;accessor&#xff09;&#xff0c;用于封装一个类的字段&…...

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…...

第九部分 使用函数 (三)

目录 一、文件名操作函数 1、dir 2、notdir 3、suffix 4、basename 5、addsuffix 6、addprefix 7、join 一、文件名操作函数 下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是 一系列的文件名来对待。 1、dir $(dir <names..>…...

基础命令继续

1&#xff1a;创建目录命令 mkdir命令 注意&#xff1a;创建文件夹需要修改权限&#xff0c;请确保操作均在HOME目录内&#xff0c;不要在Home外操作&#xff0c;涉及到权限问题&#xff0c;HOME外无法识别 小结&#xff1a; 练习: 2&#xff1a;touch创建文件 2&#xff1a;c…...

uni-app做A-Z排序通讯录、索引列表

上图是效果图&#xff0c;三个问题 访问电话通讯录&#xff0c;拿数据拿到用户的联系人数组对象&#xff0c;之后根据A-Z排序根据字母索引快速搜索 首先说数据怎么拿 - 社区有指导https://ask.dcloud.net.cn/question/64117 uniapp 调取通讯录 // #ifdef APP-PLUSplus.contac…...

Codeforces Round 768 (Div. 1) D. Flipping Range(思维题 等价类性质 dp)

题目 思路来源 官方题解 洛谷题解 题解 可操作的最短区间长度肯定是gcd&#xff0c;记为g&#xff0c;然后考虑如何dp 考虑g个等价类&#xff0c;每个等价类i,ig,i2*g,... 每次翻转长度为g的区间&#xff0c;会同时影响到g个等价类总的翻转的奇偶性&#xff0c; 性质一&…...

springboot集成kafka消费数据

springboot集成kafka消费数据 文章目录 springboot集成kafka消费数据1.引入pom依赖2.添加配置文件2.1.添加KafkaConsumerConfig.java2.2.添加KafkaIotCustomProperties.java2.3.添加application.yml配置 3.消费者代码 1.引入pom依赖 <dependency><groupId>org.spri…...

单例模式---JAVA

目录 “饿汉”模式 完整代码 “懒汉”模式 完整代码 单例模式&#xff1a;保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例。 单例模式可以通过实例创建的时间来分为两种&#xff1a;“饿汉”和“懒汉”模式。 “饿汉”模式 所谓的“饿汉”模式实则就是在类…...

maven管理使用

maven基本使用 一、简介二、配置文件三、项目结构maven基本标签实践(例子) 四、pom插件配置五、热部署六、maven 外部手动加载jar打包方式Maven上传私服或者本地 一、简介 基于Ant 的构建工具,Ant 有的功能Maven 都有,额外添加了其他功能.本地仓库:计算机中一个文件夹,自己定义…...

如何在一个系统中同时访问异构的多种数据库

如何在一个系统中同时访问异构的多种数据库 比如在一个系统中&#xff0c;要同时访问MySQL,H2, MsAccess, Mongodb. 要是使用Hibernate, MyBatis这些ORM&#xff0c;难度简直不敢想像。 要是MySQL还使用了分库分表&#xff0c;那更加不得了&#xff0c;一大堆的组件都要配合着…...

半监督学习 - 半监督聚类(Semi-Supervised Clustering)

什么是机器学习 半监督聚类是一种集成了有标签数据和无标签数据的聚类方法&#xff0c;其目标是在聚类的过程中利用有标签数据的信息来提高聚类性能。在半监督聚类中&#xff0c;一部分数据集有已知的标签&#xff0c;而另一部分没有标签。 以下是半监督聚类的基本思想和一些…...

实现STM32烧写程序-(3) Hex文件结构

简介 要对STM32进行更新动作, 就需要对程序文件进行解析, 大部分编译的生成程序文件是Hex或者Bin, 先来看看Hex的结构吧。 资料 Hex文件 简介 Hex文件格式最早由Intel公司于1973年创建。它最初是为了在Intel 8080微处理器上存储和传输二进制数据而设计的。随后&#xff0c;Hex…...

精品量化公式——“区域突破”,应对当下行情较好的主图看盘策略

不多说&#xff0c;直接上效果如图&#xff1a; ► 日线表现 代码评估 技术指标代码评估&#xff1a; VAR1, VAR2, VAR3&#xff1a;这些变量是通过指数移动平均&#xff08;EMA&#xff09;计算得出的。EMA是一种常用的技术分析工具&#xff0c;用于平滑价格数据并减少市场“…...

如何利用The Incredible PyTorch离线文档:深度学习者的终极学习宝典

如何利用The Incredible PyTorch离线文档&#xff1a;深度学习者的终极学习宝典 【免费下载链接】the-incredible-pytorch The Incredible PyTorch: a curated list of tutorials, papers, projects, communities and more relating to PyTorch. 项目地址: https://gitcode.…...

终极指南:如何永久免费使用Cursor Pro AI编程神器

终极指南&#xff1a;如何永久免费使用Cursor Pro AI编程神器 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial r…...

TrollInstallerX终极指南:iOS 14-16.6.1越狱工具一键部署全解析

TrollInstallerX终极指南&#xff1a;iOS 14-16.6.1越狱工具一键部署全解析 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 想要在iOS 14.0到16.6.1系统上轻松安装Troll…...

【Prometheus】如何排查一个 Target 显示为 “DOWN” 的问题?常见的原因有哪些(网络、端口、路径、认证)?

Prometheus Target “DOWN” 问题深度排查指南:从网络到认证的全链路诊断 用户问题原文:“如何排查一个 Target 显示为 ‘DOWN’ 的问题?常见的原因有哪些(网络、端口、路径、认证)?” 在超大规模生产环境中,Prometheus 监控着成千上万的目标实例。当某个关键业务的监控…...

本地部署开源大模型聊天界面Serge:零成本私有化AI助手实战指南

1. 项目概述&#xff1a;一个能在本地运行的开源大语言模型聊天界面如果你和我一样&#xff0c;对大型语言模型&#xff08;LLM&#xff09;充满好奇&#xff0c;既想体验它们强大的对话和推理能力&#xff0c;又对数据隐私、网络依赖和API调用成本心存顾虑&#xff0c;那么ser…...

2025届学术党必备的五大AI学术助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI论文工具在当代学术领域&#xff0c;已然成为了极为关键的辅助支撑力量&#xff0c;它可全…...

ISP运营商(Internet Service Provider 互联网服务提供商)介绍(提供DNS服务器)骨干网络、Peering对等互联、MPLS、带宽、延迟、丢包、抖动、SD-WAN

文章目录ISP 是什么&#xff1f;一文读懂互联网服务提供商&#xff08;Internet Service Provider&#xff09;一、ISP 是什么&#xff1f;二、ISP 在网络中的位置三、ISP 的核心作用1. 提供互联网接入四、ISP 如何分配 IP 地址&#xff1f;五、ISP 与 DNS 的关系六、ISP 的网络…...

Instructure 向 Canvas 黑客支付赎金,数据虽归还但支付风险引担忧

Instructure 向 Canvas 黑客支付赎金&#xff0c;数据归还但支付风险引担忧 2026 年 5 月 11 日消息&#xff0c;Instructure 已向一群网络犯罪分子支付了赎金。在过去一周半的时间里&#xff0c;这群犯罪分子两次攻击了该公司的学习管理系统 Canvas。 根据这家教育技术公司周一…...

Java 注解底层原理、组合注解实现与 AOP 协同机制全解析

Java 注解底层原理与 AOP 协同工作机制 系统性总结 本文严格基于 Java 注解底层原理及 AOP 结合使用的核心技术论述&#xff0c;对知识点进行系统性梳理、重组与优化。全文遵循元注解构建组合注解 → 注解编译与运行底层机制 → 注解AOP 协同工作原理 → 实战问题与解决方案的逻…...

从零到顶刊投稿,Perplexity辅助研究全流程,精准定位高影响力论文与方法论缺口

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity学术研究最佳实践概览 Perplexity 是衡量语言模型预测能力的核心指标&#xff0c;其数学定义为交叉熵的指数形式&#xff1a;\( PPL 2^{-\frac{1}{N}\sum_{i1}^{N}\log_2 p(w_i \mid w_{数据…...