gpt4 book ai didi

java - RxJava : call function when two observables with different result types are completed

转载 作者:行者123 更新时间:2023-11-30 10:53:58 25 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,它通过我通过 RxJava Observables 访问的 API 检索两个不同的对象。要更新 UI,我需要两个结果。

如何在两个 Observable 完成后立即运行一个函数?似乎像 merge 这样的函数正在做我计划的事情,但据我所知,它们只适用于具有相同结果类型的 Observables,或者需要一个可以表示两种类型的复合对象。

一个简单的例子:

Observable.just("Hello world")
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
Observable.just(1, 2, 3, 4, 5, 6)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer i) {
System.out.println(i);
}
});

一旦两个 Observable 都完成了它们的任务,我需要做什么来运行 System.out.println("Finished!")

在我的 Android 应用程序的特定情况下,我可以简单地将结果存储在实际的类中,有一个 updateUi 函数,它只在所有需要的数据都已经到达时才起作用,并从两个 onCompleted 调用中调用这个函数,但我觉得在那里是更好的方法。

最佳答案

版本 2:发出的项目作为“副” Action 处理,只有 onCompleted 事件通过合并的可观察对象。

Observable<String> stringObservable = Observable.just("Hello world")
.doOnNext(System.out::println)
.ignoreElements();
Observable<Integer> integerObservable = Observable.just(1, 2, 3, 4, 5, 6)
.doOnNext(System.out::println)
.ignoreElements();

Observable.merge(stringObservable, integerObservable)
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
System.out.println("Finished!");
}

@Override
public void onError(Throwable throwable) {
/*optionally handle if one of the observables calls onError()*/
}

@Override
public void onNext(Object o) { /*not called*/ }
});

关于java - RxJava : call function when two observables with different result types are completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com