我需要创建一个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实现相同的操作.