chcę osiągnąć, że jeśli zgłoszę metodę Obervable.subscribe(Action1)
, nie rzucać OnErrorNotImplementedException
wszędzie, ale jeśli zgłoszę Obervable.subscribe(Action1, Action1)
, druga akcja jest wywoływana, gdy błąd jest podnoszona jako normalne. Próbowałem na dwa sposoby:Prevent OnErrorNotImplementedException
.onErrorResumeNext(Observable.empty())
OnErrorNotImplementedException
ten sposób nie jest wyrzucane, jednak jeśli mijam również drugie działanie, akcja nie jest wywoływana albo.
drugie:
.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);
}
}
};
}
});
Problem polega na tym, czy observeOn()
nazywa później to będzie to asynchroniczny i oczywiście mój wyjątek obsługi tutaj nie zadziała.
Czy można to osiągnąć. Szkoda, że nie byłoby metody subscribe()
, która nie rzuca OnErrorNotImplementedException
w onError
.
Dzięki! Tak, to jest sposób. Mój problem polega na tym, że w ten sposób tracę składnię lambda w subskrybencie i zawsze muszę dodawać klasy anonimowe. :( – WonderCsabo
Wygląda na to, że nie ma innej możliwości niż przekazanie pustej implementacji 'onError()' z lambda lub podklasą, więc akceptuję tę odpowiedź: – WonderCsabo
Sprawdź moje rozwiązanie poniżej @WonderCsabo – FireZenk