Причина в том, что вы пытаетесь показать прогресс ->
listenerCoursesListItemService.adapterShowProgress();
внутри метода call (), который на самом деле выполняется в другом потоке (Schedulers.io ()), а не в потоке пользовательского интерфейса (AndroidSchedulers.mainThread ()).
Вместо этого вы можете показать прогресс внутри метода doOnSubscribe () и отклонить его внутри onComplete ().Оба метода будут вызваны в потоке пользовательского интерфейса.Обновленный код ниже для справки:
mCompositeDisposable.add(myObservable(IdLang, shortTermCoursesModels)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(@NonNull Disposable disposable) throws Exception {
listenerCoursesListItemService.adapterShowProgress();
}
})
.doFinally(new Action() {
@Override
public void run() throws Exception {
listenerCoursesListItemService.adapterHideProgress();
}
})
.subscribeWith(new DisposableObserver<String>() {
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String string) {
}
}));
И:
private Observable<String> myObservable(String IdLang, List<GetShortTermCoursesModel> shortTermCoursesModels) {
return Observable.defer(new Callable<ObservableSource<? extends String>>() {
@Override
public ObservableSource<? extends String> call() throws Exception {
for (int i = 0; i < 900000000; i++) {
Log.i("WWWWWWWW", "A " + i);
}
return Observable.just("ok");
}
});
}
Внутри onNext () вы получите строку, возвращаемую методом call ().