RxJava:发布主题doOnSubscribe永远不会被调用

时间:2016-08-12 17:32:30

标签: java rx-java reactive-programming rx-android

我想实现一个简单的场景,当观察者订阅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方法永远不会被调用。

这里有什么不对吗?还是有另一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:5)

Observable上的每个操作员都返回另一个Observable - 它没有改变状态,而是创建一个新的操作员。因此,您没有订阅在订阅时间执行操作的observable,而是订阅了主题。

只做

publishSubject
    .doOnSubscribe(() -> doSmth())
    .subscribe();