繁体   English   中英

React Native 应用程序中物理 Android 设备上的获取请求错误

[英]Fetch request error on physical Android device in React Native app

我正在使用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 文件中。 我已经添加了,但仍然得到错误。

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

ip 地址10.0.2.2是一个特殊地址,表示在 Android 仿真器中运行时仿真器正在运行的计算机。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM