- 安卓开发,在某些设备上运行没有问题。放到部分设备上,就会出现问题。抛错如标题所示。
- 这是因为从Android 9.0(API级别28)开始,默认情况下限制了明文流量的网络请求,对未加密流量不再信任,直接放弃请求,因此http的url均无法在webview中加载,https 不受影响。
- 如果是使用webview的方式访问网路,可以使用解决方案(AndroidManifest.xml):
<manifest ...>
<application
...
android:usesCleartextTraffic="true"
...>
xxxxxxxxxxxx
</application>
</manifest>
- 如果是使用httpclient等方式请求网络,常见场景就是访问API,此时可以使用另一个开关来解决:
<manifest ...>
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
这里需要注意,【network_security_config】应该对应一个xml文件,位置放在res/xml/文件夹下。内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
- 除此以外,还有一写处理方式,倒也不难。比如:targetSdkVersion 降级回到 27以下,或者将服务器所有接口改为https,网络请求全部使用https,这就好了。
- PS:推荐一款https服务器:caddy :https://caddyserver.com/
评论区