Android高版本http请求错误

December 08, 2019

在 Android 7(API 24)上正常,但在 Android 10(API 29) 上 Volley 请求 http 失败,所以不显示内容。

request_http_failed_in_high_version

查询到 Android Pie 行为变更中提到:

传输层安全协议 (TLS) 实现变更

系统的传输层安全协议 (TLS) 实现在 Android 9 中经历了若干次变更:

如需了解有关在 Android 应用中进行安全网络请求的更多信息,请参阅 一个 HTTPS 示例


解决方法

  1. 改用 https 请求 (推荐)
  2. targetSdkVersion 改为 27 以下
  3. AnroidManifest.xml 中的 <application> 标签中添加

    android:usesCleartextTraffic=“true”

  4. 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>

按照第三条修改后:

after