【问题标题】:RxJava2, Retrofit - doOnNext, doAfterNext, doOnComplete doesn't callRxJava2,改造 - doOnNext,doAfterNext,doOnComplete 不调用
【发布时间】:2017-08-07 12:10:16
【问题描述】:

我尝试从服务器获取一些数据。

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 不会调用。 我做错了什么?

【问题讨论】:

    标签: java retrofit2 rx-java2


    【解决方案1】:

    直到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(...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多