2016-08-12 4 views
2

オブザーバーがPublishSubjectにサブスクライブするときに特定のアクションが実行される単純なシナリオを実装したいと思います。RxJava:Publish subject doOnSubscribeが呼び出されない

私はこのようにそれを実装:

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メソッドが呼び出されることは決してありませんということです。

ここに何か問題がありますか?またはこれを行う別の方法がありますか?

答えて

3

Observableの各演算子は、別のObservableを返します。状態を変更していないため、新しい状態を作成しています。したがって、サブスクリプション時間にアクションを実行するオブザーバブルにサブスクライブするのではなく、サブジェクトにサブスクライブしただけです。

ただ、あなたは絶対的に正しい

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

を行い、感謝 –

関連する問題