【问题标题】:Fetch request error on physical Android device in React Native appReact Native 应用程序中物理 Android 设备上的获取请求错误
【发布时间】:2023-03-15 12:43:01
【问题描述】:

我正在使用fetch() 从我的服务器(在我的本地机器上运行)获取一些数据。当我在 Android 模拟器中运行我的 React Native 应用程序时,它运行良好。但是当我尝试在我的 USB 连接的 Android 手机上运行它时,它返回错误:TypeError: Network request failed。我尝试访问的主机 IP 设置为 http://10.0.2.2:8080/

这是我的获取代码:

    fetch(constants.HOST, {
        method: 'POST',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: "user=" + user
    })
    .then(response => response.json())
    .then(json => {
        .....
    })
    .catch( err => console.log("fetch error",err));

我看到几个答案建议将<uses-permission android:name="android.permission.INTERNET" /> 添加到 AndroidManifest.xml 文件中。我已经添加了,但仍然出现错误。

编辑:请注意,请求最多两分钟内不会返回错误。它永远不会立即抛出错误。

【问题讨论】:

  • 您是否尝试过此处的任何说明来调试设备上的问题? stackoverflow.com/questions/43415884/…
  • 可以通过电话联系到10.0.2.2 吗?
  • 什么是“可达”?在网络浏览器中导航?当它通过 USB 连接时?

标签: android react-native fetch


【解决方案1】:

IP 地址10.0.2.2 是一个特殊地址,表示在 Android Emulator 中运行模拟器时所运行的计算机。

来自https://developer.android.com/studio/run/emulator-networking

10.0.2.2 主机环回接口的特殊别名(即开发机器上的 127.0.0.1)

因此,在实际设备上运行时,此 IP 地址无效。您需要确保设备和您的服务器(您的开发机器)在同一个本地网络中运行,然后在该本地网络中使用您的服务器的 IP 地址,而不是 10.0.2.2

您还需要确保服务器应用程序(例如 node.js 实例)设置为接受来自外部计算机(而不仅仅是来自本地主机)的连接,这意味着它侦听 0.0.0.0 而不仅仅是在localhost。您还需要确保服务器上没有活动的软件防火墙会阻止来自外部计算机的连接。

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-04-16
    相关资源
    最近更新 更多