2017-01-25 8 views
2

私はこの問題に直面しています。私が知っている限り、RxJavaからzipメソッドを見ると、すべての観測値が完了するのを待ちます。件名が完了するとRx Javaのzipが完了します

しかし、別の動作が発生しています。ここで

は私のコードスニペットは、この場合、

private PublishSubject<Void> firstSubject; 
    private PublishSubject<Void> secondSubject; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     loadData(); 
     mDrawerHeaderView.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       // getSecondSubject().onNext(null); 
      } 
     }, 1000); 
     mDrawerHeaderView.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       getFirstSubject().onCompleted(); 
      } 
     }, 1000); 
    } 

    protected PublishSubject<Void> createFirstSubject() { 
     firstSubject = PublishSubject.create(); 
     return firstSubject; 
    } 

    protected PublishSubject<Void> createSecondSubject() { 
     secondSubject = PublishSubject.create(); 
     return secondSubject; 
    } 

    protected PublishSubject<Void> getFirstSubject() { 
     return firstSubject; 
    } 

    protected PublishSubject<Void> getSecondSubject() { 
     return secondSubject; 
    } 

    private void loadData() { 
     Observable<Void> firstSubject = createFirstSubject(); 
     Observable<Void> secondSubject = createSecondSubject(); 
     Observable<Boolean> allDataTask = Observable.zip(firstSubject, secondSubject, new Func2<Void, Void, Boolean>() { 
      @Override 
      public Boolean call(Void aVoid, Void aVoid2) { 
       return true; 
      } 
     }); 
     allDataTask 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<Boolean>() { 
        @Override 
        public void onCompleted() { 
         Notifications.showSuccessMessage(getApplicationContext(), "COMPLETE"); 
        } 

        @Override 
        public void onError(Throwable e) { 
         Notifications.showErrorMessage(getApplicationContext(), "ERROR"); 

        } 

        @Override 
        public void onNext(Boolean aBoolean) { 
         Notifications.showSuccessMessage(getApplicationContext(), "NEXT"); 
        } 
       }); 
    } 

である私はCOMPLETEメッセージが表示されましたが、私は第2の主題が完了していないので、何を取得するために期待していました。 私は間違っていますか? 希望の行動を取るのを手伝ってください。

+0

[Rx Java Observableの複製がいくつかの条件まで実行される](http://stackoverflow.com/questions/41856356/rx-java-observable-execute-until-some-condition) –

答えて

3

はい、それはas expectedで動作します。 1つのストリームが終了した場合、そのストリームのすべての要素が「圧縮」されている限り、何も「圧縮」する方法がないため、「完了」します。onCompleted()を受け取ることは理にかなっています。また、シーケンスhereで再生することもできます。

+0

回答ありがとうございますどのようにRx Javaを使用して希望の結果を達成するための例を提供してください – brqgddez

+0

私はすべての要求が完了するまで待つ – brqgddez

関連する問題