voglio ottenere che se chiamo il metodo Obervable.subscribe(Action1)
, non buttare OnErrorNotImplementedException
ovunque, ma se chiamo Obervable.subscribe(Action1, Action1)
, la seconda azione viene chiamato quando un'errore viene generato come normale. Ho provato due modi:Prevenire OnErrorNotImplementedException
.onErrorResumeNext(Observable.empty())
questo modo OnErrorNotImplementedException
non si butta, se mi passa anche la seconda azione, l'azione non viene mai chiamato neanche.
Secondo:
.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);
}
}
};
}
});
Il problema con questo se observeOn()
è chiamato più tardi allora questo sarà asincrona e ovviamente la mia gestione qui un'eccezione non funzionerà.
C'è un modo per raggiungere questo obiettivo. Vorrei che ci sarebbe un metodo subscribe()
che non getta OnErrorNotImplementedException
in onError
.
Grazie! Sì, questo è un modo. Il mio problema è che in questo modo perdo la sintassi lambda nell'abbonato e devo sempre aggiungere classi anonime. :( – WonderCsabo
Apparentemente non c'è altro modo che passare una implementazione vuota 'onError()', sia con lambda che con sottoclasse, quindi accetto questa risposta – WonderCsabo
Controlla la mia soluzione qui sotto @WonderCsabo – FireZenk