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
相关产品推荐
相关产品推荐

