Ich bin neu bei RxJava 2 und möchte einen Completable
Server-API-Aufruf wiederholen, bis er erfolgreich ist, während Benachrichtigungen der Wiederholungsversuche ausgegeben werden, sodass meine Benutzeroberfläche den Wiederholungsstatus anzeigen kann der Benutzer.RxJava 2: Erneut abschließen, während Wiederholungsbenachrichtigungen an Abonnenten gesendet werden
Etwas wie folgt aus:
public Observable<RetryAttempt> retryServerCall() {
// execute Completable serverCall()
// if an error is thrown, emit new RetryAttempt(++retryCount, error) to subscriber
// retry until serverCall() is successful
}
public Completable serverCall();
public class RetryAttempt {
public RetryAttempt(int retryCount, Throwable cause);
}
ich ein paar verschiedene Ansätze ausprobiert habe und lief in Hindernisse. Am nächsten kommt dieser Ansatz, indem ein umschließendes Observable erstellt wird und onNext()/onComplete()/onError() explizit aufgerufen wird.
public Observable<RetryAttempt> retryServerCall() {
final int[] retryCount = {0};
return Observable.create(e ->
serverCall()
.doOnError(throwable -> e.onNext(new RequestHelp.RetryAttempt(++retryCount[0], throwable)))
.retry()
.subscribe(() -> e.onComplete(), throwable -> e.onError(throwable)));
}
Vielleicht ist es ein wenig eine periphere Angelegenheit, aber ich hatte für retryCount
um die final
Array zu verwenden, um den Fehler variable used in lambda should be final or effectively final
zu vermeiden.
Ich weiß, es muss ein besser sein, dies mit Rx Voodoo zu erreichen. Jede Anleitung wird sehr geschätzt!
Sie wollen nicht, es genau so tun, wie Sie Abmelde Signalisierung verlieren. –
@Tassos Wahr. Ich kann 'subscribeWith' verwenden, um ein' Disposable' für das innere 'Observable' zu erhalten und dann über' setDisposable' zu entsorgen, richtig? – HolySamosa