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

Android端React Native无法连接本地服务器(Genymotion与Expo环境)

解决Expo+Genymotion下本地API请求被重定向的问题

嘿,我之前在Genymotion上跑Expo项目时也碰到过一模一样的问题,咱们来一步步搞定它~

首先得明确问题根源:你的自定义测试域名http://mylocalapi.test在Genymotion模拟器里没法被DNS解析,所以请求才会被跳转到dnssearch.com。模拟器的网络环境和你本地电脑不是完全打通的,自定义域名默认识别不了。

下面是几个亲测有效的解决方案:

1. 用本地IP替换自定义域名

这是最直接的办法:

  • 先找到你电脑的本地IP(Windows用ipconfig,Mac/Linux用ifconfig或ip addr命令查看)
  • 把请求里的域名换成你的本地IP,比如你的IP是192.168.3.10,代码改成这样:
    let data = fetch('http://192.168.3.10/api/query?resource=article')
      .then((response) => {
        console.log("Get Data");
        console.log(response);
        this.setState({articles:JSON.parse(response._bodyInit)});
      });
    

2. 调整Genymotion的网络模式

确保模拟器用桥接模式,这样它会直接接入你的本地网络,和电脑处于同一网段:

  • 打开Genymotion模拟器的设置 → 网络选项
  • 选择「桥接模式」,然后重启模拟器
  • 重启后再测试请求,大概率能正常访问了

3. 验证本地API的可访问性

先排除API本身的问题:

  • 在Genymotion的内置浏览器里输入「本地IP+API路径」,比如http://192.168.3.10/api/query?resource=article
  • 如果浏览器也打不开,说明你的API服务只绑定了127.0.0.1(只能本地访问),需要把服务的监听地址改成0.0.0.0,这样外部设备/模拟器就能访问了

额外优化:规范响应解析方式

顺便提一句,你用response._bodyInit解析响应的写法不太标准,建议换成官方推荐的response.json(),兼容性更好还能简化代码,顺便加个错误捕获方便排查:

let data = fetch('http://你的本地IP/api/query?resource=article')
  .then(response => response.json())
  .then(jsonData => {
    console.log("Get Data");
    console.log(jsonData);
    this.setState({articles: jsonData});
  })
  .catch(error => {
    console.error("请求出错啦:", error);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:16:53