由于Retrofit底层使用是基于OkHttp3的,但是OkHttp3会默认使用密文传输,代码中使用Http协议,也就是使用明文传输,所以OkHttp3会主动的报错,然后阻止线程的运行。所以会直接报错,但是这个报错并不是在所有型号的手机上都会发生的,比如:一加3正常运行,华为手机无法连接服务器。
解决办法:
解决办法有两种,分别为:
- 修改配置文件,使OkHttp3允许使用明文传输。
- 直接使用Https协议。
我们这里主要介绍一下第一种方法:
在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.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标签内应用上面的xml配置:
<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme">
</application>