如何在Android 24中发起HTTP请求,解决连接失败相关报错问题
问题原因及解决方案
该问题是Android 7.0(API 24)及以上版本网络策略变化、服务端监听配置或网络连通性问题导致,按以下步骤依次排查即可解决:
1. 确认明文流量配置生效位置
android:usesCleartextTraffic="true"必须配置在AndroidManifest.xml的<application>根标签下,若错写到<activity>等子标签中不会生效,正确示例:
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true" ...> <!-- activity 配置 --> </application>
2. 配置网络安全规则(若项目已启用Network Security Config)
如果项目中存在res/xml/network_security_config.xml网络安全配置,该配置优先级高于usesCleartextTraffic,需要在配置中单独放开10.0.2.2的明文请求权限:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">10.0.2.2</domain> </domain-config> </network-security-config>
同时确认AndroidManifest.xml的<application>标签已经引用该配置:
android:networkSecurityConfig="@xml/network_security_config"
3. 排查服务端监听配置
10.0.2.2是安卓模拟器指向宿主机的专属地址,若你的后端服务默认仅绑定127.0.0.1:8080,会拒绝来自模拟器虚拟网卡的访问请求,需要将后端服务的监听地址修改为0.0.0.0:8080,允许所有网卡的访问请求。
4. 验证网络连通性
打开安卓模拟器自带的浏览器,直接访问http://10.0.2.2:8080,如果无法正常打开说明是网络层面的问题:
- 若使用真机测试,不要用10.0.2.2,替换为宿主机的局域网IP,同时保证手机和电脑在同一WiFi下,且电脑防火墙开放8080端口
- 若使用模拟器测试,可重启模拟器后重试,或检查adb端口映射规则是否异常
5. 辅助排查项
- 确认
AndroidManifest.xml中已添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 临时将连接超时修改为10000ms,排除短超时导致的连接失败问题
内容的提问来源于stack exchange,提问作者Master Qiao
相关产品推荐
相关产品推荐

