2015-04-16 32 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

相关问题