React Native在Android上进行Fetch网络请求失败

16

我试图从 mocky 获取一些简单的 json。

React Native 的 fetch 函数:

getMemberDomainList = async (name) => {
  try {
    let response = await fetch('https://5c9cc9ed3be4e30014a7d287.mockapi.io/api/domain', {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
    });
    let responseJson = await response.json();
    return responseJson;
  } catch (error) {
    console.error(error);
  }
}

我在Windows上使用Chrome测试了地址,返回了预期的模拟数据。但是当我在我的安卓手机上调用该函数时,我收到了这个错误:enter image description here

来自远程调试器的错误。

...\node_modules\react-native\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:2348 TypeError: Network request failed
    at XMLHttpRequest.xhr.onerror (...\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:4337)
    at XMLHttpRequest.dispatchEvent (...\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:10760)
    at XMLHttpRequest.setReadyState (...\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:10511)
    at XMLHttpRequest.__didCompleteResponse (...\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:10343)
    at ...\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:10449
    at RCTDeviceEventEmitter.emit (...\Libraries\Components\DrawerAndroid\DrawerLayoutAndroid.android.js:11)
    at MessageQueue.__callFunction (...\Libraries\ART\ReactNativeART.js:362)
    at blob:http://localhost:8081/79251787-d190-4650-8040-23d091c08738:2334
    at MessageQueue.__guard (...\Libraries\ART\ReactNativeART.js:312)
    at MessageQueue.callFunctionReturnFlushedQueue (...\Libraries\ART\ReactNativeART.js:139)

我在我的应用程序中也运行了一个 WebView,它指向一个 Web URL,并且可以完美加载,因此我确定手机具有互联网权限和访问等。


1
可能是因为需要使用 https 而不是 http ... - Hend El-Sahli
在您的远程调试器中,这个 console.error(error); 打印了什么? - Hend El-Sahli
1
远程调试器不起作用,很遗憾。但是关于https的建议很好,我会尝试另一个模拟服务,看看是否可以解决问题。 - Rasmus Puls
切换到一个https模拟API似乎有所改善,至少堆栈跟踪看起来有点不同。但是仍然出现相同的错误:“网络请求失败”。 - Rasmus Puls
你尝试过使用 axios 执行相同的 API 请求吗? - Hend El-Sahli
显示剩余3条评论
4个回答

4

1

无法让mockapi.io正常工作。但是使用以下服务时错误不会持久存在:

https://jsonplaceholder.typicode.com/todos/1

也许这并不是与Android或React Native有关的问题。在Postman中使用mockapi.io时也遇到了问题,但在Chrome中却可以正常工作。

0
请检查后端响应状态。
如果后端使用205状态发送内容- 205 RESET CONTENT Android系统将其识别为错误- HTTP 205 had non-zero Content-Length: 25
您可以在Postman上检查状态代码。 因此,在这种情况下,应该在后端修复错误。 它应该使用200状态代码发送内容。

0

如果您正在使用模拟器,请使用浏览器检查此仿真中的互联网是否正常工作。 如果没有,请检查此内容:Android模拟器无法访问互联网

我在模拟器中也遇到了这个问题,但是当我生成一个发布应用并安装在真实设备(Andoid 9)上时,它可以正常工作。


1
是的,开发/生产构建可能会影响诸如互联网访问或允许使用哪些协议等事项。在我的情况下,我能够很好地针对 https://jsonplaceholder.typicode.com 进行获取,排除了我无法在模拟器上连接到互联网的想法。 - Rasmus Puls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接