Android上的React Native Fetch返回网络请求失败
我正在构建一个React Native移动应用程序,该应用程序使用当前在localhost:8000上运行的Laravel后端。当进行抓取从Android设备请求到我的服务器,我的应用程序获取以下错误日志:Android上的React Native Fetch返回网络请求失败
我的代码如下:
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,并希望得到任何帮助。
我怀疑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" />
。
对不起,我没有指定。我正在使用终端上的'npm start'命令,并将其部署到我的物理设备(Galaxy S8 +)。 – davidzucco
您可以通过手机访问互联网吗?您是否与电脑位于同一网络? –
是的,我在手机上和我的笔记本电脑在同一个WiFi上。 – davidzucco
iOS在模拟器中运行,而Android在模拟器中运行。仿真器模拟真实设备,而仿真器仅仿真设备。 因此,Android上的localhost指向模拟的Android设备,而不是运行服务器的机器。 您应该使用您的计算机的IP地址在您的请求路径中更改本地主机。
更多细节在:https://github.com/facebook/react-native/issues/10404#issuecomment-267303151
我也试图加入爱可信我的阵营原生应用和使用axios.get(...),我得到一个相同的错误日志使用取时一样,在上面的图片所示。 – davidzucco