Android上的React Native Fetch返回网络请求失败

Android上的React Native Fetch返回网络请求失败

问题描述:

我正在构建一个React Native移动应用程序,该应用程序使用当前在localhost:8000上运行的Laravel后端。当进行抓取从Android设备请求到我的服务器,我的应用程序获取以下错误日志:Android上的React Native Fetch返回网络请求失败

enter image description here

我的代码如下:

export default class App extends Component { 
login() { 
    fetch('http://localhost:8000/api/establishments/get') 
     .then((response) => response.json()) 
     .then((responseJson) => { 
     console.log('success!'); 
     }) 
     .catch((error) => { 
     console.error(error); 
     }); 
    } 

    render() { 
    return (
     <TouchableOpacity activeOpacity={.5} onPress={() => this.login()}> 
     <Text>Sign In</Text> 
     </TouchableOpacity> 
    ); 
    } 
} 

当我复制和粘贴的确切路线在我的浏览器中,服务器按预期成功完成响应。我相信这是来自我的应用程序的网络权限问题?我刚刚在一周前才开始学习React Native,并希望得到任何帮助。

+0

我也试图加入爱可信我的阵营原生应用和使用axios.get(...),我得到一个相同的错误日志使用取时一样,在上面的图片所示。 – davidzucco

我怀疑127.0.0.1或localhost会指向服务器当前正在运行的计算机中的模拟器本身。如果您使用的是Genymotion或计算机的实际IP地址,请尝试使用10.0.2.2替代127.0.0.1/localhost(如果您使用的是AVD或10.0.3.2)。另外,您还应该确保您的Android应用程序可以使用互联网。你可以通过在你的AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET" />

+0

对不起,我没有指定。我正在使用终端上的'npm start'命令,并将其部署到我的物理设备(Galaxy S8 +)。 – davidzucco

+0

您可以通过手机访问互联网吗?您是否与电脑位于同一网络? –

+0

是的,我在手机上和我的笔记本电脑在同一个WiFi上。 – davidzucco

iOS在模拟器中运行,而Android在模拟器中运行。仿真器模拟真实设备,而仿真器仅仿真设备。 因此,Android上的localhost指向模拟的Android设备,而不是运行服务器的机器。 您应该使用您的计算机的IP地址在您的请求路径中更改本地主机。

更多细节在:https://github.com/facebook/react-native/issues/10404#issuecomment-267303151