最近在做一个小东西,需要用volley访问http网络,调试的时候出现无法获取数据的情况。出错信息显示:
No Network Security Config specified, using platform default
看起来是无法访问网络,但在安卓9.0以下版本上使用没问题,所以在风上一顿翻,终于找到原因了,Android 9.0 限制了明文的网络请求,非加密的请求都会被系统禁止掉,如果应用的请求是 http,而不是 https ,这样系统会禁止该请求。
而我在项目里要访问的数据都是http的明文数据,解决方法如下:
在res的xml里新建一个名为network_security_config.xml
文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- 解决 Android9.0以上版本,禁止 http 请求数据的问题 -->
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml application 标签上添加xml配置:
android:networkSecurityConfig="@xml/network_security_config"
如此即可解决问题。
附:安卓开发实在是太麻烦了,android studio写东西就很麻烦,牵一发动全身,有些问题还莫明其妙。安卓本身又变来变去的,很多东西还不向下兼容,要不断地进行版本判断。真的是够了。
在我的项目里用的是http://ip-api.com/json/自动获取本地经纬度的网址,今天又出现了一个奇怪的现象,获取的地址是马来西亚的,结果导致天气无法显示。真的有点麻烦。好在过一会就好了。