rxJava 错误捕获 socketTimeoutException
rxJava error catching socketTimeoutException
我有一个改造生成的可观察对象,我正在尝试对其实施错误处理,特别是连接超时。出错的订阅者被调用得很好,但应用程序仍然因 sockettimeout 错误而崩溃。有什么建议吗?
Observable<History> history = api.returnHistoryRX(pair, String.valueOf(unixTime-3600), String.valueOf(unixTime));
history.onErrorReturn(throwable -> null);
订户
public void getPriceNow(Observable<List<history>> history, String pair) {
Timestamp timestamp2;
timestamp2 = new Timestamp(System.currentTimeMillis());
history.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(history1 -> {
String currentValue;
if (history1.size()>0){
System.out.println("testing rx");
}
}, e->System.out.println("getPriceNow: error called"));
}
为了测试,我使用 okhttp
将超时设置得过低
private OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.MILLISECONDS)
.readTimeout(30L, TimeUnit.MILLISECONDS)
.writeTimeout(100L, TimeUnit.MILLISECONDS);
错误链如下所示:
java.lang.IllegalStateException:Scheduler.Worker 线程上抛出异常。添加 onError
处理。
原因:rx.exceptions.OnErrorNotImplementedException:连接失败
原因:java.net.SocketTimeoutException:连接失败
当您调用 history.onErrorReturn(...)
时,该方法 returns a new Observable
应用了适当的行为。您需要在希望应用错误处理行为的地方使用返回的可观察对象。在您的情况下,它可能就像更改
一样简单
history.onErrorReturn(throwable -> null);
到
history = history.onErrorReturn(throwable -> null);
或将其移动到初始化 history
变量的位置。
添加 .onExceptionResumeNext {
观察者
尝试设置全局错误处理程序
// 如果 Java 支持 8 个 lambda
RxJavaPlugins.setErrorHandler(e -> { });
// 如果没有 Retrolambda 或 Jack
RxJavaPlugins.setErrorHandler(Functions.emptyConsumer());
我有一个改造生成的可观察对象,我正在尝试对其实施错误处理,特别是连接超时。出错的订阅者被调用得很好,但应用程序仍然因 sockettimeout 错误而崩溃。有什么建议吗?
Observable<History> history = api.returnHistoryRX(pair, String.valueOf(unixTime-3600), String.valueOf(unixTime));
history.onErrorReturn(throwable -> null);
订户
public void getPriceNow(Observable<List<history>> history, String pair) {
Timestamp timestamp2;
timestamp2 = new Timestamp(System.currentTimeMillis());
history.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(history1 -> {
String currentValue;
if (history1.size()>0){
System.out.println("testing rx");
}
}, e->System.out.println("getPriceNow: error called"));
}
为了测试,我使用 okhttp
将超时设置得过低 private OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.MILLISECONDS)
.readTimeout(30L, TimeUnit.MILLISECONDS)
.writeTimeout(100L, TimeUnit.MILLISECONDS);
错误链如下所示:
java.lang.IllegalStateException:Scheduler.Worker 线程上抛出异常。添加 onError
处理。
原因:rx.exceptions.OnErrorNotImplementedException:连接失败
原因:java.net.SocketTimeoutException:连接失败
当您调用 history.onErrorReturn(...)
时,该方法 returns a new Observable
应用了适当的行为。您需要在希望应用错误处理行为的地方使用返回的可观察对象。在您的情况下,它可能就像更改
history.onErrorReturn(throwable -> null);
到
history = history.onErrorReturn(throwable -> null);
或将其移动到初始化 history
变量的位置。
添加 .onExceptionResumeNext {
观察者
尝试设置全局错误处理程序
// 如果 Java 支持 8 个 lambda RxJavaPlugins.setErrorHandler(e -> { });
// 如果没有 Retrolambda 或 Jack RxJavaPlugins.setErrorHandler(Functions.emptyConsumer());