问题起因
java.net.UnknownServiceException: CLEARTEXT communication to v.juhe.cn not permitted by network security policy
在借助OkHttp3对聚合数据平台的某个免费Api发起GET请求时,无法成功响应
原因分析
刚开始时,对相关代码进行DeBug发现代码从var response = client.newCall(request).execute()直接跳转至抛出异常
然后在浏览器对url进行访问,可以成功呈现数据
于是查看聚合数据Api后台,同时重新运行Demo发起GET请求,发现后台统计数据未发生变化
于是查看日志发现:java.net.UnknownServiceException: CLEARTEXT communication to v.juhe.cn not permitted by network security policy
解决方法
查找相关资料发现:Google 为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。
因此可以采用以下几种方法进行解决:
方法一:将http请求改为https请求:
方法二:targetSdkVersion降到27以下
方法三:更改网络安全配置
res下新建 network_security_config.xml文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在AndroidMainfest中的application标签中添加此属性
<application
...
android:networkSecurityConfig="@xml/network_security_config"
.../>
方法四:更改AndroidMainfest配置 直接在application标签中添加以下代码
android:usesCleartextTraffic="true"