Rx java RxJava:将来自不同观察对象的项目添加到主题
我正在尝试向主题添加项目 但是我不能调用Rx java RxJava:将来自不同观察对象的项目添加到主题,rx-java,Rx Java,我正在尝试向主题添加项目 但是我不能调用Subject.onNext(),因为我从其他可观察对象中获取其他项 // My observer subscribes to a ReplaySubject subject.subscribe(observer) // The first item is emitted (and regularly received by my observer) // by the first observable, that after t
Subject.onNext()
,因为我从其他可观察对象中获取其他项
// My observer subscribes to a ReplaySubject
subject.subscribe(observer)
// The first item is emitted (and regularly received by my observer)
// by the first observable, that after that terminates
firstObservable.subscribeWith(subject)
// Now I have other observables emitting other things,
// and I would like to send them to the subject so that the observer receives them,
// possibly without manually calling subject.onNext()
不建议订阅一个主题
到多个可观察的
s,但您可以合并这些可观察的
s并订阅:
ReplaySubject<Integer> subject = ReplaySubject.create();
Observable.merge(first, second, third).subscribe(subject);
如果源也是动态创建的,请使用PublishSubject
和merge
将其:
Subject<Observable<Integer>> sources = PublishSubject.<Observable<Integer>>.create()
.toSerialized();
Observable<Integer> output = Observable.merge(sources).replay().autoConnect();
sources.onNext(Observable.fromCallable(() -> getOneThing()));
sources.onNext(Observable.range(1, 10).subscribeOn(Schedulers.computation()));
Subject sources=PublishSubject..create()
.toSerialized();
可观察的输出=可观察的.merge(sources).replay().autoConnect();
onNext(Observable.fromCallable(()->getOneThing());
sources.onNext(Observable.range(1,10).subscribeOn(Schedulers.computation());
根据合同,如果一个主题订阅()
到一个可观察的终止,那么主题也将终止
您可以使用一个主题,而不是主题。基本上是一个主题
,它不会从源中传播终止。它实现而不是,但是由于subscribe()
接受这些接口中的任何一个作为类型参数RxRelay
是一个替代品。这些其他可观察到的
是预先知道的吗?为什么您可以调用subject.onNext(getOneThing())
,而用创建一个可观察的,
?您好,谢谢,因为我无法控制我得到的是什么,我以可观察的形式得到了我想要的所有数据
Subject<Observable<Integer>> sources = PublishSubject.<Observable<Integer>>.create()
.toSerialized();
Observable<Integer> output = Observable.merge(sources).replay().autoConnect();
sources.onNext(Observable.fromCallable(() -> getOneThing()));
sources.onNext(Observable.range(1, 10).subscribeOn(Schedulers.computation()));