我有一个 RxJava 链请求,应该释放一些 onError() 或 onComplete() 锁,所以,基本上,我的问题是:当我为 OkHttpClient 设置读取、连接和写入超时时,我没有得到所需的行为。我正在使用 Retrofit2 和 OkHttp3.6.0 这是我的简化客户端:
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
OkHttpClient okHttpClient = builder.build();
这是我的链请求的简化版本:
public <T extends Response> Observable<T> doSomething(Observable<T> base) {
isLocked = true;
return someApiCall()
.flatMap(apiResponse -> handleResponse(apiResponse, base)
.doOnError(throwable -> {
isLocked = false;
})
.doOnCompleted(() -> {
isLocked = false;
}));
}
handleResponse()
进行另一个 API 调用并返回Observable<Response<Something>>
但是,正如我所说,它有时会失败HTTP FAILED: java.net.SocketException: Socket closed
并且它永远不会完成 Observable,因此永远不会调用 onError() 或 onComplete()。我也尝试过 onTerminate() ,但没有运气。当我从OkHttlClient
, the SocketException
实际上被抛出并被抓住,释放了isLocked
多变的。我试过包裹handleResponse()
return 语句带有try {} catch (Exception e) {}
阻止,但即使这样也没有抓住SocketException
当设置自定义超时时。有任何想法吗?
我在 Android 中使用构建器设置的选项 retryOnConnectionFailure(true) 解决了这种情况。
鉴于 Retrofit 2 仅接收 OkHttpClient 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)