Android React native fetch api不适用于localhost、IP甚至10.0.2.2

Android React native fetch api不适用于localhost、IP甚至10.0.2.2,android,django,react-native,expo,fetch-api,Android,Django,React Native,Expo,Fetch Api,我在安卓设备上使用expo客户端,并在localhost:8000上安装了django服务器,我正在尝试使用fetch-in-react-native访问和终结点。我已经看过了,但那不起作用 我还尝试使用我机器的ip地址而不是本地主机,但没有结果。下面是一个示例代码 componentDidMount(){ return fetch('http://my-ip-address:8000/restapi/') .then((response) => { c

我在安卓设备上使用expo客户端,并在
localhost:8000
上安装了django服务器,我正在尝试使用fetch-in-react-native访问和终结点。我已经看过了,但那不起作用

我还尝试使用我机器的ip地址而不是本地主机,但没有结果。下面是一个示例代码

componentDidMount(){
    return fetch('http://my-ip-address:8000/restapi/')
      .then((response) => {
        console.log("success")
        response = response.json()
      }).catch(error => {
        console.error(error)
      })
  }
我做错了什么?

解决方案 根据你的密码

  • 您的django端口:
    :8080
  • 获取的目标端口:
    :8000
再查一遍。
我建议在测试服务器API时使用

这可能是django配置的问题。尤其是当手机的网络浏览器无法获得预期的响应时

从:

请参阅,尽管答案也适用于本地网络:

python manage.py运行服务器0.0.0.0:8000

如果您知道机器的地址,可以将其替换为
0.0.0


同样值得注意的是,在响应处理程序中,
response.json()
返回的是承诺,而不是json。相反,您希望:

fetch('http://my-ip-address:8000/restapi/')
  .then(response => response.json())
  .then(responseJson => {
    console.log("success");
    console.log(responseJson);
  })
  .catch(error => {
    console.error(error);
  })

除了csum的回答之外,请检查防火墙是否允许远程访问django服务器的android设备(设备IP为remote)。如果您安装了防病毒软件并控制防火墙,请确保其防火墙中有规则。

是否在设备或模拟器上进行测试?请尝试使用127.0.0.1作为您的ip地址。如果这不起作用,试着用邮递员看看你是否能交流。我在用我的移动设备。我试了127.0.0.1。这不起作用,而且我用邮递员来验证我得到了正确的响应。使用实际的设备有点不同。根据您提供的emulator链接,并使用10.0.2.2,我假设您使用的是emulator。您的手机是否在同一网络上。您是否验证过您没有防火墙或任何阻止传入连接/端口的东西?请澄清,控制台中没有打印“成功”,对吗?您使用的是本地网络地址,所有相关设备都连接到同一网络?对不起,我弄错了。港口是8000
fetch('http://my-ip-address:8000/restapi/')
  .then(response => response.json())
  .then(responseJson => {
    console.log("success");
    console.log(responseJson);
  })
  .catch(error => {
    console.error(error);
  })