Android 9 中 HTTP 网络请求错误
Android 9 中 HTTP 网络请求错误
昨天进行一个练手app,调试用的是手机,开始连接的是一个 Android 6 版的旧手机,调试运行都正常。但是当连接我现在使用的手机时(Android 9 ),发现通过URL访问网络资源时 app 页面没有显示相应的数据,一开始让我百思不得其解,后来通过 LogCat 调试信息中找到了蛛丝马迹,LogCat 的调试错误信息将错误定位于以下代码行:
if (conn.getResponseCode() == 200)
这是个什么鬼? 按照 “conn.getResponseCode() == 200” 百度搜索了一堆信息,然而都驴唇不对马尾,解决不了这个问题。然后自己瞎折腾了好久也还是那样,算了睡觉!
今天在 AS 中新建了一个基于 Android 8 的 AVD。然后将昨天的 app 在其中跑起来,是正常的!这才发现只要是 Android 8 及其以下版本,都可以正常访问网络,而 Android 9 版本就不行。由此想到 Android 8 与 Android 9 的不同才是产生这个问题的根本原因。于是按照 “Android 9 中出错 HTTP 网络请求错误” 百度搜索,这才找到了正确的解决方案。特此记录:
出现这个错误的原因是:从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。且Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
解决方案
在res目录下新建一个xml目录,在xml目录下新建network_security_config.xml文件,
插入以下代码
< ?xml version="1.0" encoding="utf-8"?>
< network-security-config>
< base-config cleartextTrafficPermitted="true" />
< /network-security-config>
编辑 AndroidManifest.xml节点application
插入代码:
android:networkSecurityConfig="@xml/network_security_config"
感谢原文作者!
原文链接: