我想实现一个简单的场景,当观察者订阅PublishSubject时会发生某个动作。
我实现了这样:
PublishSubject<String>publishSubject=PublishSubject.create();
publishSubject.doOnSubscribe(new Action0() {
@Override
public void call() {
//do something
}
});
publishSubject.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
}
});
publishSubject.onNext("xyz");
问题是Action0.call方法永远不会被调用。
这里有什么不对吗?还是有另一种方法可以做到这一点?
答案 0 :(得分:5)
Observable
上的每个操作员都返回另一个Observable
- 它没有改变状态,而是创建一个新的操作员。因此,您没有订阅在订阅时间执行操作的observable,而是订阅了主题。
只做
publishSubject
.doOnSubscribe(() -> doSmth())
.subscribe();