/AndroidRuntime(1185): android.os.NetworkOnMainThreadException 异常解决

本文介绍如何解决Android应用中出现的NetworkOnMainThreadException异常。该异常通常发生在主线程执行网络请求时。文中提供了通过降低targetSdkVersion来避免异常的方法,并推荐了使用线程的方式进行网络操作,附带了一个简单的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/AndroidRuntime(1185): android.os.NetworkOnMainThreadException

是因为程序在主线程上执行网络访问,所以产生的。 可以降低

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

不报异常。但是最好的解决方法还是写线程

package com.example.testandroidwebservice;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.util.Log;

public class HttpInfo implements Runnable{

	@Override
	public void run() {
		try {
			HttpClient hc=new DefaultHttpClient();
			HttpGet get=new HttpGet("http://192.168.1.100:8080/book-portlet/api/jsonws/book/add-book/id/1");
			HttpResponse httpresponse=hc.execute(get);
			HttpEntity he=httpresponse.getEntity();
			
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Log.d("=============", "=====================");
	}

}

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ipEditText = findViewById(R.id.ipEditText); portEditText = findViewById(R.id.portEditText); Button connectButton = findViewById(R.id.connectButton); connectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ip = ipEditText.getText().toString(); int port = Integer.parseInt(portEditText.getText().toString()); new ConnectTask().execute(ip, String.valueOf(port)); } }); Button sendMessageButton = findViewById(R.id.sendMessageButton); sendMessageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showSendMessageDialog(); } }); }出现E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.rlswj, PID: 16184 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1668) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116) at java.net.SocketOutputStream.write(SocketOutputStream.java:161) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.BufferedWriter.flush(BufferedWriter.java:254) at java.io.PrintWriter.newLine(PrintWriter.java:482) at java.io.PrintWriter.println(PrintWriter.java:629) at java.io.PrintWriter.println(PrintWriter.java:670)
06-01
06-26 09:47:06.997 1251 1251 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main 06-26 09:47:06.997 1251 1251 E AndroidRuntime: java.lang.IllegalStateException: Signature|privileged permissions not in privileged permission allowlist: {com.telcelam.lockscreen (/system/priv-app/realme/MXSiprogo): android.permission.REAL_GET_TASKS, com.dti.amx (/system/priv-app/realme/TelcelDT): android.permission.SCHEDULE_EXACT_ALARM} 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.permission.access.permission.AppIdPermissionPolicy.onSystemReady(AppIdPermissionPolicy.kt:1634) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.permission.access.AccessPolicy.onSystemReady(AccessPolicy.kt:275) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.permission.access.AccessCheckingService.onSystemReady$frameworks__base__services__permission__android_common__services_permission_pre_jarjar(AccessCheckingService.kt:239) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.permission.access.permission.PermissionService.onSystemReady(PermissionService.kt:2295) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.onSystemReady(PermissionManagerService.java:780) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.pm.PackageManagerService.systemReady(PackageManagerService.java:4702) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.SystemServer.startOtherServices(SystemServer.java:3157) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:1014) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:713) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:681) 06-26 09:47:06.997 1251 1251 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:893)
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值