Fetch / Axios在React Native中崩溃(但仅适用于某些URL)



我的应用程序在执行某些API 调用时崩溃得很厉害,我将其缩小到这一点:

  • 这不是HTTP与HTTPS的事情
  • 最终使用了两个不同的模拟API,令我惊讶的是,一个有效,另一个无效。两者基本相同,请参见下面的片段
  • 在 WIFI 或蜂窝网络上的行为相同
  • 在 axios 而不是 fetch 中存在相同的问题
  • catch块被调用,出现一个不起眼的网络错误,但随后应用程序仍然严重崩溃

环境:安卓 10(实际设备(,RN 0.61.5

下面的两个调用都只是执行一个简单的HTTP GET,这会导致返回 JSON 代码段。一个有效,另一个导致硬崩溃。

async foo() {
try {
// this endpoint CRASHES my app
const r = await fetch("http://jsonplaceholder.typicode.com/todos/1");

// this endpoint works just fine
//const r = await fetch("http://echo.jsontest.com/key/value/one/two");
} catch(e) {
console.log("Invoked, but the app still crashes hard right after");
}
}

好的,我在 Logcat 中找到了一个提示 - 似乎使用 OkHttp3 会导致某种版本冲突,该冲突仅在其中一个响应中表现出来(可能是由于 CORS 标头,但这是纯粹的、毫无根据的猜测;)。

我的解决方法是将我对 OkHttp3 的依赖性从build.gradle

implementation "com.squareup.okhttp3:okhttp:4.7.2"

api(platform("com.squareup.okhttp3:okhttp-bom:4.7.2"))
api("com.squareup.okhttp3:okhttp")
api("com.squareup.okhttp3:logging-interceptor")

尝试在 axios 中为配置添加超时

private axios: Axios;
private config: AxiosRequestConfig = {
baseURL: 'http://192.168.10.18:8000/api',
headers: {
'Content-Type': 'application/json'
},
timeout: 5000
}
constructor() {
this.axios = new Axios(this.config);
}

我遇到了同样的问题,axios 请求使应用程序崩溃。控制台上没有日志或任何东西。甚至尝试通过接受的答案解决,但没有奏效。

Logcat确实有助于理解在java中以双精度数据类型传递null的问题。我想也许我们使用的一些动画导致了这个问题,但看起来 null 正在通过 axios 传递给某个库,例如 okhttp 用于 HTTP 请求。

最新更新