2015-04-16 33 views
7

我正在使用RxJava和RxAndroid,並且我想組合兩個observable但在兩者之間需要更新UI,因此我必須在主線程中執行代碼之前達到訂戶。RxJava,在鏈接兩個observable之前在觀察器線程中執行代碼

一個解決方案,而不是flatmapping(是一個公認的術語?)兩個可觀察的事件,將更新UI後調用訂閱服務器中的下一個observable,但我覺得應該有一個更優雅的解決方案,如:

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

當然,可能地圖不是我需要在這裏使用的運算符。那麼,是否有運營商或更好的方式來實現這一目標?或者我錯過了觀察者應該如何工作的觀點?

回答

4

Rxjava有一個doOnNext操作符,它就是您要查找的。

+1

這是在觀察者線程上調用?該文檔指出它不在特定的調度程序上運行。 – Pnikosis

+0

您必須使用observeOn並指定調度程序 – dwursteisen

+0

謝謝,可以肯定的是,這意味着我在doOnNext上運行的所有內容都將與訂戶在同一個線程中運行。 – Pnikosis

相關問題