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

Expo React Native安卓设备无法访问Django后端,求排查网络错误

问题分析与解决方法

核心问题1:本地回环地址无法跨设备访问

你在React Native中使用的127.0.0.1是安卓设备自身的回环地址,并非运行Django后端的电脑IP,安卓设备无法通过这个地址访问电脑上的服务。

解决方法:

  • 查看电脑在局域网内的实际IP(Windows用ipconfig,Mac/Linux用ifconfig或ip addr),格式通常为192.168.x.x
  • 修改apiCall的baseURL为电脑局域网IP:
export const apiCall = axios.create({
    baseURL: "http://192.168.x.x:8000/drinks/", // 替换为你的电脑实际局域网IP
    timeout: 3000,
    headers: {
        "Content-Type": "application/json",
    },
});
  • 确保电脑与安卓设备连接在同一WiFi网络下

核心问题2:API请求路径重复

你的apiCall已将baseURL设为/drinks/,但调用时又使用get("/drinks/"),最终请求URL会变成http://xxx:8000/drinks//drinks/,路径重复会导致后端返回404错误,触发Axios网络错误。

解决方法:

  • 方案一:修改baseURL为根路径,调用时指定完整路径:
// apiCall.js
export const apiCall = axios.create({
    baseURL: "http://192.168.x.x:8000/",
    // 其他配置不变
});

// DrinksScreen.js
apiCall.get("/drinks/")
  • 方案二:保持baseURL为/drinks/,调用时使用空路径:
apiCall.get("/")

核心问题3:Django后端未开放局域网访问

默认情况下Django仅监听127.0.0.1,局域网内设备无法访问。启动后端时需指定绑定所有地址:

python manage.py runserver 0.0.0.0:8000

额外检查:安卓网络权限

确保Expo项目的app.json中包含网络权限:

{
  "expo": {
    "android": {
      "permissions": ["INTERNET"]
    }
  }
}

代码中的其他小问题

  • loadDrinksData的then回调里,你打印的data未定义,且Axios响应数据存放在response.data中
  • 未调用setDrinks更新组件状态

修改后的loadDrinksData示例:

function loadDrinksData() {
    apiCall
        .get("/") // 对应baseURL为/drinks/的情况
        .then((response) => {
            console.log("success!, data: ", response.data);
            setDrinks(response.data);
        })
        .catch((error) => {
            console.log("error!: ", error);
        });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:37