2017-08-07 36 views
0

我嘗試從服務器獲取一些數據。RxJava2,Retrofit - doOnNext,doAfterNext,doOnComplete不會調用

Observable<List<Countries>> backendObservable = mCountriesApi.getCountries() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()); 

backendObservable.doOnNext(list -> Log.d(TAG, "doOnNext")); 
backendObservable.doAfterNext(list -> Log.d(TAG, "doAfterNext")); 
backendObservable.doOnComplete(() -> Log.d(TAG, "doOnComplete")); 

backendObservable.subscribe(new Observer<List<Country>>() { 
     @Override 
     public void onSubscribe(Disposable d) { 

     } 

     @Override 
     public void onNext(List<Country> value) { 
      Log.d(TAG, "doOnNext")); 
     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onComplete() { 

     } 
    }); 

這是行得通的,我收到數據到「onNext」。但方法doOnNext,doAfterNext,doOnComplete不會調用。 我做錯了什麼?

回答

0

你一直到observeOn,發生了什麼事?你必須對Observable連鎖經營,因爲它們是不可變的數據流圖:

backendObservable = backendObservable.doOnNext(list -> Log.d(TAG, "doOnNext")); 
backendObservable = backendObservable.doAfterNext(list -> Log.d(TAG, "doAfterNext")); 
backendObservable = backendObservable.doOnComplete(() -> Log.d(TAG, "doOnComplete")); 

或更簡潔

Observable<List<Countries>> backendObservable = mCountriesApi.getCountries() 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .doOnNext(list -> Log.d(TAG, "doOnNext")); 
     .doAfterNext(list -> Log.d(TAG, "doAfterNext")); 
     .doOnComplete(() -> Log.d(TAG, "doOnComplete")); 
     .subscribe(...); 
+0

謝謝你。其作品。 –