2015-08-03 5 views
0

Мы используем RxAndroid + retrofit для наших вызовов api.RxAndroid - как бросить фатальные исключения после onCompleted()

Я понимаю, почему любые исключения в последовательности пройдут Throwable through onError().

Но как вы заканчиваете последовательность, как вы затем обрабатываете ответ и возвращаетесь к повторным роковым исключениям? Я бы ожидал, что обработка в onCompleted() позволит это, но я все еще вижу, как вызывается onError().

Упрощенный фрагмент ниже. Дает результат -

throwable: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference

 Observable<ResponseModel> observable = getApiCallObservable(); 
 
     AppObservable.bindFragment(this, observable) 
 
       .subscribeOn(AndroidSchedulers.mainThread()) 
 
       .subscribe(new Observer<ResponseModel>() { 
 
        @Override 
 
        public void onCompleted() { 
 
         uninitializedList.add("item"); 
 
        } 
 

 
        @Override 
 
        public void onError(Throwable e) { 
 
         Log.e(TAG, "throwable: " + e.getMessage()); 
 
        } 
 

 
        @Override 
 
        public void onNext(ResponseModel response) { 
 
     
 
        } 
 
       });

спасибо за любую помощь

ответ

0

Я не уверен, что я понял, что спрашивают здесь. В принципе, если ваш Observable getApiCallObservable() выдает сообщение об ошибке, вызывается onError, и вы должны обрабатывать ошибку соответственно в onError. Если это произойдет, так оно и есть, ничего больше не произойдет. Если произошла ошибка, вызывается onError и заканчивается поток. Если нет ошибки, вызывается onNext, и вам нужно что-то сделать с ответом. После onNext, наконец, вызывается onCompleted.

Ошибка, которая отображается, просто говорит о том, что ваш arraylist uninitializedList имеет значение null, поэтому вызов метода add() недействителен.

Редактировать. Кажется, я сейчас понял. Вы хотите обработать ошибку без вызова onError наблюдаемым. Переместите свой неполный код в onNext, и он не попадет под onError, он выбросит фатальное исключение. это оно?

+0

Пробовал переходить к onComplete, снова onError получает вызовы с npe. В основном, я хочу, чтобы приложение вылетало, когда произошло исключение. Например, если я получаю ответ api для сохранения в db. Я не хочу, чтобы Rx обрабатывал исключения db или любые другие сбои на этом пути. Я хочу, чтобы Rx содержался только для вызовов api. –

+0

onNext() i mean –

+0

переместите свой код в onNext, как я уже сказал. используйте subscribeOn (Schedulers.io) и observOn (AndroidSchedulers.newThread). Он должен исправить проблему, я думаю –

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