我正在尝试实现以下想法。
考虑以下情况
提示用户输入字段
如果用户输入了内容,则会出现另一个对话框以确认先前的操作
如果用户确认他的动作,则调用服务。
如果可以在链中使用RxJava来实现,那将是非常优雅的。
这是我尝试过的
PublishSubject<String> inputSubject = ...;
PublishSubject<Boolean> confirmSubject = ...;
PublishSubject<Integer> serviceSubject = ...;
我需要在链中运行这些主题,并且只有在前一个主题成功并且没有返回错误的情况下,才应该执行下一个主题。
这些主题由不同的对象控制,并以通常的方式调用
dialogSubject.onNext(userInput);
dialogSubject.onCompleted();
请提出是否有可能实现我的想法,或者是否有更好的方法来实现这一目标?
谢谢。
最佳答案
您可以使用“主题”将一个可观察到的发射链接到另一个
@Test
public void chainObservables() throws InterruptedException {
Observable<Long> observable = Observable.just(1l);
Subject<Long, Long> publishSubject = ReplaySubject.create(1);
Subject<Long, Long> publishSubject2 = ReplaySubject.create(1);
observable.subscribe(publishSubject);
publishSubject.subscribe(publishSubject2);
publishSubject2.subscribe(System.out::println, (e) -> System.err.println(e.getMessage()), System.out::println);
}
这里可观察到的将项目传递给publishSubject,并将publishSubject传递给publishSubject2
您可以在https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/connectable/HotObservable.java上查看更多热观测的示例