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

真机运行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地址
  • 替换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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:10:39