报错时的运行环境:
问题简述:
用android利用okhttp像本地发送请求时报错
Caused by: java.net.UnknownServiceException: CLEARTEXT communication to localhost not permitted by network security policy
由于java.net.UnknownServiceException:不允许通过网络安全策略进行与localhost的明文通信
Process: com.catanddog, PID: 21453
java.lang.RuntimeException: java.net.UnknownServiceException: CLEARTEXT communication to localhost not permitted
by network security policy
at com.catanddog.LoginActivity$1$1.run(LoginActivity.java:83)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.net.UnknownServiceException: CLEARTEXT communication to localhost not permitted by network
security policy
详情可见安卓中文官网描述
问题解决:(三种方法)
1. 使用安全的加密传输方式:改用HTTPS或其他加密方式来与本地主机进行通信,以符合网络安全策略的要求。
2. 修改网络安全策略:如果可能,您也可以尝试修改网络安全策略以允许明文通信,但这并不是推荐的做法,因为会增加安全风险。
android:usesCleartextTraffic="true"
3.配置网络安全策略文件:从 Android 9(API 级别 28)开始,Android 引入了网络安全策略机制,您需要在项目中配置 network_security_config.xml 文件,以允许明文通信。您可以创建一个 network_security_config.xml 文件并将其添加到 res/xml 目录下,并在 AndroidManifest.xml 文件中引用它。以下是一个示例配置文件:
```xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
```
在 OkHttp 客户端中设置允许明文通信:在创建 OkHttpClient 实例时,使用 clearTextTraffic() 方法来设置允许明文通信,示例代码如下:
```java
OkHttpClient client = new OkHttpClient.Builder()
.clearTextTraffic()
.build();
```