2015-04-16 21 views
7

Używam RxJava i RxAndroid, i chcę połączyć dwa obserwowalne, ale w międzyczasie muszę zaktualizować interfejs, więc muszę wykonać kod w głównym wątku przed docierając do subskrybenta.RxJava, wykonaj kod w wątku obserwatora przed powiązaniem dwóch obserwowalnych

Jednym z rozwiązań, zamiast płaskiego mapowania (czy jest to akceptowany termin?) Dwóch obserwatorów, byłoby wywołanie następnego obserwowalnego w subskrybencie zaraz po aktualizacji interfejsu użytkownika, ale uważam, że powinno być bardziej eleganckie rozwiązanie takie jak:

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()); 

Oczywiście, prawdopodobnie mapa nie jest operatorem, którego potrzebuję tutaj użyć. Czy istnieje operator lub lepszy sposób na osiągnięcie tego celu? Czy też brakuje mi punktu widzenia tego, jak działają obserwowalne?

Odpowiedz

4

Rxjava ma operator doOnnext, którego właśnie szukasz.

+1

Czy to jest wywołane w wątku obserwatora? Dokumentacja stwierdza, że ​​nie działa w określonym harmonogramie. – Pnikosis

+0

Będziesz musiał użyć funkcji obserwacjiOn i określić harmonogram – dwursteisen

+0

Dzięki, więc to oznacza, że ​​wszystko, co uruchomię na doOnNext będzie działało w tym samym wątku co subskrybent. – Pnikosis

Powiązane problemy