在 Android 7(API 24)上正常,但在 Android 10(API 29) 上 Volley 请求 http 失败,所以不显示内容。
查询到 Android Pie 行为变更中提到:
传输层安全协议 (TLS) 实现变更
系统的传输层安全协议 (TLS) 实现在 Android 9 中经历了若干次变更:
- 如果 SSLSocket 的实例在创建时连接失败,系统会引发 IOException 而非 NullPointerException。
- SSLEngine 类可正常处理出现的任何
close_notify提醒。如需了解有关在 Android 应用中进行安全网络请求的更多信息,请参阅 一个 HTTPS 示例 。
解决方法
- 改用 https 请求 (推荐)
targetSdkVersion改为27以下-
在
AnroidManifest.xml中的<application>标签中添加android:usesCleartextTraffic=“true” -
在
res/xml目录下创建network_security_config.xml文件,然后在
AndroidManifest.xml中的<application>标签中添加android:networkSecurityConfig="@xml/network_security_config"。
<!--network_security_config.xml-->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!--默认配置,明文通信,使用系统证书-->
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>按照第三条修改后: