2017-03-01 8 views
0

私はRxJAVAの初心者です。私は別のスレッドに初期化ジョブを割り当て、完了したら私にアナウンスして作業を開始したいと思います。このObservableには放出するデータがないため、this topicで説明したVoid型を使用します。しかし、Void型を使用するとObserverのonNextとonCompleteは機能しません。代わりにStringを使用しようとしましたが、正常に動作します。私はこのシナリオでVoidを使うべきか、RxJAVAにはこのような要求のための良い方法があるのか​​尋ねたいと思いますか?ここに私のコードは次のとおりです。オブザーバー<Void>のonNextとonCompleteは呼び出されません

Observable.create(new ObservableOnSubscribe<Void>() { 
    @Override 
    public void subscribe(ObservableEmitter<Void> e) throws Exception { 
    initialize(); 
    e.onNext(null); 
    e.onComplete(); 
    } 
}).subscribeOn(Schedulers.computation()).subscribe(new Observer<Void>() { 
    @Override 
    public void onSubscribe(Disposable d) {} 

    @Override 
    public void onComplete() { 
    Log.d(TAG, "Test RxJAVA, onComplete"); 
    } 

    @Override 
    public void onError(Throwable e) { 
    Log.d(TAG, "Test RxJAVA, onError"); 
    } 

    @Override 
    public void onNext(Void noData) { 
    Log.d(TAG, "Test RxJAVA, onNext"); 
    } 
}); 

編集 編集@JohnWowUsからの回答。それはうまく動作します、ありがとう。

Completable.fromCallable(new Callable<Void>() { 
    @Override 
    public Void call() throws Exception { 
    initialize(); 
    } 
}).subscribeOn(Schedulers.computation()) 
    .subscribe(new CompletableObserver() { 
     @Override 
     public void onSubscribe(Disposable d) {} 

     @Override 
     public void onComplete() { 
     Log.d(TAG, "Test RxJAVA, onComplete"); 
     } 

     @Override 
     public void onError(Throwable error) { 
     Log.d(TAG, "Test RxJAVA, onError"); 
     } 
}); 

答えて

0

RxJavaはnull値を受け入れなくなりました。 hereを参照してください。この場合はCompletableを使用する必要があります。何かのように

Completable.fromCallable(new Callable<Void>() { 
          @Override 
          public Void call() throws Exception { 
           initialize(); 
           return null; 
          }) 
      .subscribe(new CompletableObserver<Void>() { 
         @Override 
         void onSubscribe(Disposable d) { 

         } 

         @Override 
         void onComplete() { 
          Log.d(TAG, "Test RxJAVA, onComplete"); 
         } 

         @Override 
         void onError(Throwable error) { 
          Log.d(TAG, "Test RxJAVA, onError"); 
         }); 
+0

ありがとう、ありがとう – Josper

関連する問題