2017-11-24 1 views

Antwort

0

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 onSuccessonError 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); }); 
Verwandte Themen