React Native安卓端Fetch API调用失败求助:iOS正常安卓报错
解决安卓模拟器调用Bubble API出现Network request failed的问题
以下是针对该问题的具体排查和解决思路:
检查安卓模拟器网络连通性
安卓模拟器的网络可能出现异常,尝试以下操作:- 重启模拟器,或在模拟器设置中重置网络连接;
- 执行
adb shell settings put global http_proxy :0命令清除可能存在的代理设置; - 用
adb shell ping [你的API域名]测试模拟器能否正常解析并访问API服务器。
修正API地址的访问方式
如果你的Config.API_URL使用的是localhost或电脑本地IP:- Android Studio模拟器需要将
localhost替换为10.0.2.2(模拟器映射宿主机的默认IP); - 若使用Genymotion模拟器,替换为
10.0.3.2; - 确认API服务器的防火墙规则未限制模拟器所在网络的IP访问。
- Android Studio模拟器需要将
排查SSL证书问题
若API使用HTTPS协议,模拟器可能存在证书信任问题:- 针对Bubble官方API域名,尝试将模拟器系统更新至Android 10及以上版本,确保证书存储正常;
- 若使用自签名证书,需在模拟器中手动安装证书,或在React Native项目中配置允许信任该证书。
替换网络请求库测试
尝试将fetch替换为axios,部分场景下axios的兼容性更好:
先安装axios:npm install axios改写请求代码:
import axios from 'axios'; export async function loginResident(email: string, password: string) { const item = { email, password }; const url = `${Config.API_URL}wf/login_resident/${JSON.stringify(item)}`; try { const response = await axios.post(Config.API_URL + 'wf/login_resident', item, { headers: { Accept: 'application/json', 'Content-Type': 'application/json', Authorization: `Bearer ${Config.API_KEY}`, }, }); if (response.status === 200) { await cache.store(url, response.data); } } catch (error) { console.error('请求错误:', error); } return await cache.get(url); }清除模拟器缓存与应用数据
- 卸载模拟器中的应用;
- 在AVD管理器中对模拟器执行
Wipe Data操作; - 重新打包并安装应用,避免旧缓存或配置干扰。
抓取详细错误日志定位问题
执行adb logcat *:E命令,查看安卓系统层面的错误日志,从中可获取更具体的网络失败原因(如DNS解析失败、连接超时、证书验证错误等),便于精准排查。
内容的提问来源于stack exchange,提问作者Thomas Augot
相关产品推荐
相关产品推荐

