2015-04-16 10 views
7

Sto usando RxJava e RxAndroid e voglio combinare due osservabili, ma nel frattempo ho bisogno di aggiornare l'interfaccia utente, quindi devo eseguire il codice nella discussione principale prima raggiungendo l'abbonato.RxJava, esegui codice nel thread observer prima di concatenare due osservabili

Una soluzione, invece di flatmapping (è un termine accettato?) Due osservabili, sarebbe quella di chiamare il successivo osservabile nell'abbonato subito dopo aver aggiornato l'interfaccia utente, ma sento che ci dovrebbe essere una soluzione più elegante come:

myObservable 
    .map(new Func1<Object, Object>() { 
     @Override 
     public Object call(Object object) { 
      /* do stuff on the main thread */ 
      return object; 
     } 
    }) 
    .flatMap(new Func1<Object, Observable<OtherObject>>() { 
     @Override 
     public Observable<OtherObject> call(Object o) { 
      return new MyOtherObservable(o); 
     } 
    }) 
    .subscribeOn(Schedulers.newThread()) 
    .observeOn(AndroidSchedulers.mainThread()); 

Naturalmente, probabilmente la mappa non è l'operatore che devo usare qui. Quindi, c'è un operatore o un modo migliore per raggiungere questo obiettivo? O mi manca il punto su come dovrebbero funzionare gli osservabili?

risposta

4

Rxjava ha un operatore doOnNext che è quello che stai cercando.

+1

E 'stato richiamato il thread dell'osservatore? La documentazione afferma che non funziona su un particolare schedulatore. – Pnikosis

+0

Dovrai utilizzare observOn e specificare lo schedulatore – dwursteisen

+0

Grazie, per sicurezza, questo significa che tutto ciò che eseguo su doOnNext verrà eseguito nello stesso thread dell'iscritto. – Pnikosis

Problemi correlati