Das Protokoll Single
ist wie folgt definiert: onSubscribe (onSuccess | onError)?
. In Worten, wenn onSuccess
aufgerufen wird, kann onError
nicht aufgerufen werden und umgekehrt. Die doAfterSuccess
kann nirgendwo in Bezug auf dieses Protokoll gehen und um den Verlust von möglicherweise wichtigen Ausnahmen zu vermeiden, wird es an den globalen Fehlerhandler weitergeleitet. Die wiki hat genauere Erklärungen dazu. Wenn Sie nach onSuccess
onError
aufrufen möchten, verwenden Sie wahrscheinlich den falschen Typ. Das Protokoll Observable
ermöglicht den Aufruf von onError
von weiß oder nach onNext
.
Alternativ verwenden Sie try-catch
in Ihrem unzuverlässigen onSuccess
Handler und rufen Sie den gleichen Code wie Sie von onError
anrufen würden.
Single.just(1)
.doAfterSuccess(v -> {
try {
process(v);
} catch (Throwable ex) {
reportError(ex);
}
})
.subscribe(v -> { /* ok */ }, e -> { reportError(e); });