android - rxJava 捕获 socketTimeoutException 错误

标签 android error-handling rx-java retrofit2 rx-android

我有一个从改造中生成的可观察值,我正在尝试对其实现错误处理,特别是连接超时。出错的订阅者被调用得很好,但应用程序仍然因套接字超时错误而崩溃。有什么建议吗?

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(...) 时,该方法会返回一个应用了适当行为的 new Observable。您需要在想要应用错误处理行为的地方使用返回的可观察值。在你的情况下,它可能就像改变一样简单

history.onErrorReturn(throwable -> null); 

history = history.onErrorReturn(throwable -> null);

或将其移动到初始化 history 变量的位置。

关于android - rxJava 捕获 socketTimeoutException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403424/

相关文章:

java - 如何在android中使用数据库明智地删除数据ID而不是位置

java - 如何在单击 ListView 项目时出现勾号并且不会消失,直到单击的下一个项目在转到另一个 Activity 时也不会消失

mysql - SQL 插入 Access 2010 时出错

perl - 如何使Perl为无效或不存在的文件引发错误?

android - 如何计算媒体播放器的振幅分贝 (dB)?

安卓下载管理器.ERROR_FILE_ERROR

android - 我可以在哪里打印日志以立即在Android Studio中查看?

android - 使用事件总线传递 RxJava 订阅

java - RxJava 比较来自两个可观察对象的不同项目 (java 7)

android - 无法查询使用 Realm