doOnNext()
est pour les effets secondaires. Il pourrait être utilisé par exemple pour l'enregistrement de but, car l'enregistrement n'a pas d'altérer le flux de données. Mais vous voulez transmettre le résultat de l' getTransactionDetails()
, de sorte que vous devez utiliser une carte à la place.
Deuxièmement, Observable.empty()
créer un Observable
qui vient de propager la finition/débarrasser message, il déclenche ni doOnNext()
ni map()
. Vous pouvez résoudre ce problème en utilisant Observable.just()
à la place, mais un plus idiomatiques moyen serait d'utiliser Observable.timer()
:
Observable.timer(5000, TimeUnit.MILLISECONDS)
.map(o -> getTransactionDetails())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );
Une dernière remarque sur les Planificateurs. Observable.timer()
et delay()
sont exécutés sur le calcul ordonnanceur par défaut de sorte que vous n'avez pas besoin d'appeler .subscribeOn(Schedulers.io())
d'exécuter getTransactionDetails()
à l'extérieur du thread principal. Observable.timer()
et delay()
pourrait prendre un Scheduler
comme paramètre si vous voulez contrôler cela. Si vous avez besoin d'appeler .observeOn(AndroidSchedulers.mainThread())
si vous souhaitez utiliser getTransactionDetails()
résultat sur le thread de l'INTERFACE utilisateur. Chaque opérateur après l' observeOn()
est exécutée sur l'définis Scheduler
, de sorte que vous avez à mettre observeOn()
après le calcul.
Edit: C'est bien sûr, si vous vous souciez du résultat de l' getTransactionDetails()
. Si non, voir Clyde réponse.