RxJava2, Retrofit - doOnNext, doAfterNext, doOnComplete 不调用
RxJava2, Retrofit - doOnNext, doAfterNext, doOnComplete doesn't call
我尝试从服务器获取一些数据。
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 不会调用。
我做错了什么?
您在 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(...);
我尝试从服务器获取一些数据。
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 不会调用。 我做错了什么?
您在 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(...);