Я хочу достичь этого, если я вызываю метод Obervable.subscribe(Action1)
, он не выбрасывает OnErrorNotImplementedException
в любом месте, но если я вызываю Obervable.subscribe(Action1, Action1)
, второе действие вызывается, когда ошибка возникает как обычно. Я попробовал два способа:Предотвращение OnErrorNotImplementedException
.onErrorResumeNext(Observable.empty())
Этот способ OnErrorNotImplementedException
не кинули, однако, если я прохожу также второе действие, действие никогда не вызывается либо.
Второе:
.lift(new Observable.Operator<T, T>() {
@Override
public Subscriber<? super T> call(Subscriber<? super T> subscriber) {
return new Subscriber<T>() {
@Override
public void onCompleted() {
if (!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}
@Override
public void onError(Throwable e) {
if (!subscriber.isUnsubscribed()) {
try {
subscriber.onError(e);
} catch (Throwable t) {
if (!(t instanceof OnErrorNotImplementedException)) {
throw t;
}
}
}
}
@Override
public void onNext(T t) {
if (!isUnsubscribed()) {
subscriber.onNext(t);
}
}
};
}
});
Проблема с этим, если observeOn()
называется позже, то это будет асинхронно и, очевидно, моя обработка исключений здесь не будет работать.
Есть ли способ достичь этого. Хотелось бы, чтобы был subscribe()
метод, который не бросает OnErrorNotImplementedException
в onError
.
Спасибо! Да, это путь. Моя проблема заключается в том, что таким образом я теряю синтаксис лямбда в подписчике, и мне всегда приходится добавлять анонимные классы. :( – WonderCsabo
По-видимому, нет другого пути, кроме передачи пустой 'onError()' реализации, либо с лямбдой, либо подклассами. Поэтому я принимаю этот ответ. – WonderCsabo
Проверьте мое решение ниже @WonderCsabo – FireZenk