我有一个可以通过改造生成的observable,我正在尝试实现错误处理,特别是连接超时 . 错误的订阅者被调用得很好,但应用程序仍然因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:连接失败
2 回答
当您调用
history.onErrorReturn(...)
时,该方法返回 newObservable
并应用了适当的行为 . 您需要在需要应用错误处理行为的地方使用返回的observable . 在你的情况下,它可能就像改变一样简单至
或将其移动到初始化
history
变量的位置 .add .onExceptionResumeNext {
在观察者身上