T. Roman
T. Roman

Reputation: 332

RxJava2, Retrofit - doOnNext, doAfterNext, doOnComplete doesn't call

I try to get some data from server.

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() {

        }
    });

It's works, I receive data into "onNext". But methods doOnNext, doAfterNext, doOnComplete doesn't call. What i doing wrong ?

Upvotes: 1

Views: 4963

Answers (1)

akarnokd
akarnokd

Reputation: 69997

You got it right up until observeOn, what happened? You have to chain operators on Observable because they are immutable dataflow plans:

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

or more concisely

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

Upvotes: 1

Related Questions