2015-04-16 5 views
7

Я использую RxJava и RxAndroid, и я хочу объединить два наблюдаемых, но между ними мне нужно обновить интерфейс, поэтому я должен выполнить код в основном потоке до достигает подписчика.RxJava, выполнить код в потоке наблюдателя перед цепочкой двух наблюдаемых

Одно из решений, вместо того, чтобы использовать flatmapping (это принятый термин?) Два наблюдаемых, было бы вызвано следующим наблюдаемым в подписчике сразу после обновления пользовательского интерфейса, но я чувствую, что должно быть более элегантное решение, например:

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

Вам нужно будет использовать функцию watchOn и указать планировщик – dwursteisen

+0

Спасибо, так что это означает, что все, что я запускаю на doOnNext, будет работать в том же потоке, что и у подписчика. – Pnikosis

Смежные вопросы