2016-12-30 8 views
0

У меня есть наблюдаемый сгенерированный от переоснащения, который я пытаюсь реализовать для обработки ошибок, в частности, для тайм-аутов соединения. Абоненты с ошибкой вызываются просто отлично, но приложение по-прежнему падает с ошибкой сокета. Любой совет?rxJava ошибка catching socketTimeoutException

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: не удалось подключиться

ответ

1

При вызове history.onErrorReturn(...), этот метод возвращает новый Observable с соответствующей поведение. Вам нужно будет использовать возвращаемое наблюдаемое, где вы хотите, чтобы поведение обработки ошибок применялось. В вашем случае это может быть столь же просто, как изменение

history.onErrorReturn(throwable -> null); 

в

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

или переместить его туда, где вы инициализировать переменную history.

+0

Это на 100% правильное. Я действительно обнаружил, что авария не произошла из-за этих вызовов, но в другом месте приложения, совершающего одни и те же звонки. После того, как я удалил бит, вызвавший крах, у меня все еще была проблема с отключением onErrorReturn и исправлением этого обновления. Без этого я, вероятно, смотрел бы на один и тот же бит в течение нескольких часов, поэтому спасибо тонну !! – massphoenix

Смежные вопросы