使用RxJava3,给定Observable
和Subject
,我可以将Subject订阅到Observable:
observable.subscribe(subject); // returns void, not a subscription
后来,我的主题对Observable不再感兴趣,如何从Observable退订?
答案 0 :(得分:2)
我认为最简单的选择是使用返回overload of subscribe
的Disposable
,并让每个处理程序在Subject
上调用适当的方法,如下所示:
Disposable d = observable
.subscribe(subject::onNext, subject::onError, subject::onComplete);
// Later
d.dispose();
您还可以创建一个DisposableObserver
,将所有消息转发到Subject
,并使用subscribeWith
代替subscribe
,尽管它比较冗长:
Disposable d = observable
.subscribeWith(new DisposableObserver<Integer>() {
@Override public void onStart() {
}
@Override public void onNext(Integer t) {
subject.onNext(t);
}
@Override public void onError(Throwable t) {
subject.onError(t);
}
@Override public void onComplete() {
subject.onComplete();
}
});
我不知道有任何更清洁的选项,尽管RxJava Bug Tracker的目标是RxJava2,但它似乎支持了this issue。