我需要创建一个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的内容,但我似乎无法弄清楚如何构建它们以供我在这里使用。
更新
我想出了这个,不确定它是否最优雅,或者它是否会起作用......但如果它确实有效,有没有办法将第一个可观察的结果传递给第二个?如果第一次观察失败,我将如何处理问题?
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;
答案 0 :(得分:5)
如果要求可以改写如下:
Observable
s。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
实现相同的操作。