CLEARTEXT communication to xxx not permitted by network security policy
第一次使用Androidstudio开发,在使用okhttp3进行网络请求的时候,一直出现错误:CLEARTEXT communication to xxx not permitted by network security policy
然后查找了网上的文章,都是说是因为自Android9.0系统开始,应用程序默认只允许使用HTTPS类型的网络请求,HTTP类型的网络请求因为有安全隐患默认不再支持。
所以当我们要使用HTTP的时候,需要进行配置修改。
首先在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
然后在res/xml目录下新建xml文件,命名network_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
最后还要修改AndroidManifest.xml文件以启动刚才创建的配置文
android:networkSecurityConfig="@xml/network_security_config">
所以整个AndroidManifest.xml应该是
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
但是!还是不行!还是连不上
然后一直找为什么会出现D/NetworkSecurityConfig: No Network Security Config specified, using platform default。找了网上各种资料,都是让更改安全配置!结果都不行!
最后!是因为看到下一行错误:failed to connect localhost/127.0.0.1这个错才知道Android把模拟设备的地址设为了127.0.0.1,计算机本地IP设为了10.0.2.2
最后我把需要连接的url改为:http://10.0.2.2:就可以了!喜大普奔!
(另外要注意要在子线程进行网络请求!)