我的控制产生了冷 Observable
。订阅时,它总是产生(如果没有错误):
onNext()
onCompleted()
我是这样的帮手类:
public class Helper {
private Subscription subscription;
private ReplaySubject<MyData> subject;
private Observable<MyData> coldObservable;
public HelperClass(Observable<MyData> aColdObservable) {
coldObservable = aColdObservable;
subject = ReplaySubject.create(1);
triggerRefresh();
}
public Observable<MyData> getObservable() {
return subject.asObservable();
}
public void triggerRefresh() {
if (subscription != null) {
subscription.unsubscribe();
subscription = null;
}
subscription = coldObservable
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.subscribe(subject);
}
}
我已经对该主题进行了多次订阅,请将此伪代码用于客户端:
public class Client {
private final Helper helper;
private Observable<MyData> proxiedObservable;
public Client(Observable<MyData> coldObservable) {
helper = new Helper(coldObservable);
}
public void init() {
proxiedObservable = helper.getObservable()
.subscribeOn(Schedulers.io)
.observeOn(Schedulers.computation());
Subscription a = newSubscription("A");
Subscription b = newSubscription("B");
Subscription c = newSubscription("C");
}
public Subscription newSubscription(String name) {
return proxiedObservable.subscribe(data -> log("next " + name),
throwable -> log("error " + name),
() -> log("complete " + name));
}
public void refresh() {
helper.triggerRefresh();
}
}
初始化时会打印在日志中:
next A
complete A
next B
complete B
next C
complete C
在调用refresh()
之后的某个时刻,我希望重复这个完全相同的日志,而不是打印任何内容。
显然,当冷观察者触发完整事件时,它会自动取消订阅我proxiedObservable
的所有订阅。
我不需要完整的活动,但我需要新的MyData来覆盖所有订阅。
有没有办法来抑制onComplete事件?或者还有另一种方法来实现我的需求吗?
答案 0 :(得分:4)
此问题是RxRelay要解决的问题 - Subject
可以接收onComplete
,导致其关闭。
如果您不习惯添加此依赖项,那么您也可以使用materialize()
+ filter()
从序列中删除onComplete
。
答案 1 :(得分:0)
抑制-g
(同时仍允许错误传播)的一种简单方法是:
onComplete