Имею вот такой код: io.reactivex
get().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.delay(5, TimeUnit.SECONDS)
.doOnSubscribe(d-> getViewState().showLoadingView(d))
.doFinally(() -> getViewState().hideLoadingView())
.subscribe(data->{
getViewState().showData(data);
}, er->{
Log.e("TutorialPresenter", er.toString());
});
И почему то в subscribe получаю экзепшен android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Но я ведь делаю .observeOn(AndroidSchedulers.mainThread()) что не так?
В моем случае
get()
.subscribeOn(Schedulers.io()) //переход в поток вычислений
.observeOn(AndroidSchedulers.mainThread()) // переход в UI поток
.delay(5, TimeUnit.SECONDS) // переход в поток вычислений (вот из-за этого и экзепшен)
Правильный вариант при задержке
get()
.subscribeOn(Schedulers.io()) //переход в поток вычислений
.delay(5, TimeUnit.SECONDS) // переход в поток вычислений
.observeOn(AndroidSchedulers.mainThread()) // переход в UI поток
либо
get()
.subscribeOn(Schedulers.io()) //переход в поток вычислений
.delay (5, TimeUnit.SECONDS, AndroidSchedulers.mainThread()) // переход в UI поток
Сборка персонального компьютера от Artline: умный выбор для современных пользователей