You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native 0.66 Android端axios调用接口报Network request failed错误

问题引发原因
  • 你通过Laravel Valet配置的cms.test是仅Mac本地生效的自定义域名,Android设备/模拟器的DNS系统没有对应的解析记录,无法识别该域名指向的服务器地址,这是触发NETWORK ERROR的核心原因。
  • 虽然你已经配置了usesCleartextTraffic="true"放行http请求,但域名解析失败的优先级更高,所以该配置不生效。
解决方案

方案一:直接替换请求域名(优先选择,操作简单)

  1. 先查询Mac的局域网IP:打开终端执行命令ifconfig | grep inet,找到形如192.168.x.xx的非127.0.0.1的IP地址。
  2. 修改axios的baseURL配置,将http://cms.test/替换为http://你查到的Mac局域网IP/,如果Valet没有配置IP默认访问的项目,需要补全项目路径,示例:
// 假设你的Mac局域网IP为192.168.3.15,cms项目存放在park目录下的cms文件夹
axios.defaults.baseURL = 'http://192.168.3.15/cms/public/';
  1. 确保测试用的Android模拟器/真机和Mac连接同一个WiFi网络,即可正常发起请求。

方案二:配置Android设备hosts解析(适配需要保留test域名的场景)

如果不想修改代码里的域名,可给Android设备配置hosts规则:

  1. 确保你的Android模拟器已获取root权限,真机需要root后操作。
  2. 打开终端执行以下命令:
# 获取root权限
adb root
# 重新挂载系统分区获取写入权限
adb remount
# 拉取设备hosts文件到桌面
adb pull /system/etc/hosts ~/Desktop/hosts
  1. 打开桌面的hosts文件,新增一行记录:你的Mac局域网IP cms.test,保存文件。
  2. 执行命令把修改后的hosts文件推回设备:
adb push ~/Desktop/hosts /system/etc/hosts
  1. 重启Android设备后即可用原http://cms.test/域名正常请求接口。
额外注意项

你当前代码的catch逻辑存在问题,return false执行后后续的错误提示代码不会运行,建议调整顺序:

.catch(error => {
    console.log(error);
    // 先判断response是否存在,避免解析报错
    if(error.response?.data?.errors) {
        const key = Object.keys(error.response.data.errors)[0];
        setError(error.response.data.errors[key][0]);
    }
    return false;
})

内容的提问来源于stack exchange,提问作者shazim ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:54:02