RxJava:如何运行两个顺序调用:第二个依赖于第一个

我需要创建一个observable,其中依次运行2个基于改进的调用块.我知道我可以在一个Observer调用中运行第二个改装调用,但它会非常混乱.我将Observable代码放在与调用者不同的类中,它返回一个Observable.我想将第一个调用的结果传递给第二个调用,然后在第二个调用完成后将一个Observable传递给调用类. (我使用的是Java 7而不是8)

public class GetFollowing {

 public Observable< ArrayList<Media> >  init() {
    return Observable.create(
                    new Observable.OnSubscribe< ArrayList<Media> >() {
                        @Override
                        public void call(Subscriber<? super  ArrayList<Media> > subscriber) {

...

我还需要将一个不同的类型传递回调用类,而不是传递给第二个改装调用.我一直在阅读有关map flatMap和concat的内容,但我似乎无法弄清楚如何构建它们以供我在这里使用.

UPDATE

我想出了这个,不确定它是否最优雅,或者它是否会起作用……但是如果它确实有效,有没有办法将第一个可观察的结果传递给第二个?如果第一个观察失败,我将如何处理问题?

Observable< ArrayList<Media> > test;

         Observable.concat(

                Observable.create(
                        new Observable.OnSubscribe< ArrayList<User> >() {
                            @Override
                            public void call(Subscriber<? super  ArrayList<User> > subscriber) {

                            }
                        }
                ),
                 test = Observable.create(
                        new Observable.OnSubscribe< ArrayList<Media> >() {
                            @Override
                            public void call(Subscriber<? super  ArrayList<Media> > subscriber) {

                            }
                        }
                )

        );

        return test; 

解决方法:

如果要求可以改写如下:

>您有两种方法可以执行,并且都返回Observables.
>第一个方法的Observable上发出的项目需要在它们发生时被送入第二个方法.
>第二种方法的输出是一个Observable,它基于对第一个Observable项的一些计算.

RxJava中现成的flatMap功能是您的解决方案.以下是一个简单的实现,以帮助您.

public static void main(String[] args) {
    Observable<Integer> o1 = Observable.just(1, 2);
    Observable<String> result = o1.flatMap(result1 -> Observable.just("Value is: "+result1));
    result.subscribe(finalResult -> System.out.println("Final result: "+finalResult));
}

输出:

Final result: Value is: 1
Final result: Value is: 2

另一方面,如果第二种方法不返回Observable,但对发出的项执行某些操作,则可以使用map实现相同的操作.

上一篇:c# – Observable.Interval等到动作完成


下一篇:Android 学习记录 - 观察者模式