RxJava экзепшен CalledFromWrongThreadException при subscribe

148
15 января 2021, 18:50

Имею вот такой код: 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()) что не так?

Answer 1

В моем случае

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 поток
READ ALSO
База данных для тестов Java

База данных для тестов Java

Пишу приложение на java с использованием базы данных postgre sqlСвойства прописаны в файле \resourses\application

119
Как правильно вернуть массив из метода?

Как правильно вернуть массив из метода?

Есть метод, который делает положительные числа отрицательными и наоборот

113
Смена звука уведомления

Смена звука уведомления

Жму пункт меню:

103
Картинки и числа Android Studio

Картинки и числа Android Studio

Вот например, у меня есть приложение которое выводит сумму в результате сложения выбранных чисел (из двух дат) , которая по итоге не превышает...

109