RxJava - 当一个Observable完成时开始另一个Observable

6

我有两个不同泛型类型的Observables:Observable o1和Observable o2。

我已经为o1定义了onComplete()和onNext()函数,并且当这个Observable完成时,我希望o2可以开始。

我尝试过使用Observable.concat(),但它们具有不同的类型,所以这种方法行不通...

那么我该怎么做呢?

2个回答

7

在使用concatWith之前,请使用castAs(还可以使用ignoreElements):

Observable<T> o1;
Observable<R> o2;

Observable<R> o3 = 
  o1.ignoreElements()
    .castAs(R.class)
    .concatWith(o2);

如果您正在使用通用类型(因此无法使用R.class),则可以这样操作:
Observable<R> o3 = ((Observable<R>)(Observable<?>)
  o1.ignoreElements())
    .concatWith(o2);

还有一个问题:我的“R”类是一个List<R>。我该如何将一个具有特定泛型类型的List进行强制转换? - pablobaldez
添加了关于通用类型的说明 - Dave Moten

0

Observable 有一个叫做 doOnCompleted 的方法,它接受一个 Action0(一个零参数函数),并返回一个新的 Observable,当它正常完成时执行该操作。也许你可以使用这个来实现你想要的?

o1.doOnCompleted(() -> {
    // Start o2.
});

那么你是如何启动o2的?提问者希望总体流返回什么呢?在rxjava中,在有适当的操作符可用于一次订阅完成所有操作时,在onComplete操作中调用subscribe边缘不良反向模式。 - Dave Moten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接