真机运行Expo React Native应用无法调用本地Flask API求助
解决方案
1. 修正Flask应用的监听地址
默认app.run()仅绑定127.0.0.1,仅本地可访问。要允许局域网设备连接,需将监听地址改为0.0.0.0:
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
2. 确认网络环境与IP正确性
- 保证真实Android手机和运行Flask的电脑连接同一WiFi网络
- 重新获取电脑的局域网IP:
- Windows:执行
ipconfig查看无线网卡的IPv4地址 - macOS/Linux:执行
ifconfig或ip addr查看无线网卡的inet地址
- Windows:执行
- 替换React Native代码中的
URL为正确的电脑局域网IP
3. 检查电脑防火墙设置
- 临时关闭电脑防火墙测试,或添加入站规则允许5000端口的网络请求
- 确认无杀毒软件拦截5000端口的连接
4. 修正API返回格式(推荐优化)
Flask-RESTful的Resource支持直接返回字典,框架会自动处理JSON序列化,无需手动调用json.dumps(手动序列化会返回字符串,可能导致前端解析异常):
from flask_restful import Resource class UserMobile(Resource): def get(self): return {"data": "test user"}
5. 调试前端请求逻辑
在getUser函数中增加日志排查问题,同时移除多余的JSON.parse(response.json()已将响应解析为JS对象):
const getUser = async () => { try { const URL = "http://192.168.10.22:5000/mobile" console.log("请求地址:", URL) const response = await fetch(URL, { method: "GET", headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', } }) console.log("响应状态码:", response.status) let res = await response.json() console.log("响应内容:", res) response.ok && res ? setUser(res.data) : setUser("") setIsValidated(true) console.log("User: ", user) } catch (err) { console.log("Error ", err) setUser("") } }
6. 确认Android设备网络权限
在app.json中确保已添加网络权限(Expo默认会包含,但自定义配置时需确认):
{ "expo": { "android": { "permissions": ["INTERNET"] } } }
内容的提问来源于stack exchange,提问作者za_ali33
相关产品推荐
相关产品推荐

