2017-08-07 35 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

谢谢你。其作品。 –