ViewRootImpl $ CalledFromWrongThreadException rxjava setVisibiltiy through rxjava

问题描述 投票:0回答:1

[大家好,我目前在RXJava中遇到线程问题。我想通过rxjava设置可见,但是android抛出了这个异常

“ ViewRootImpl $ CalledFromWrongThreadException”

Disposable disposable = Single.concat(
            getClearStorageObservable()
                    .doOnError(Timber::e)
                    .onErrorResumeNext(Single.just(false)),
            getDownloadObservable())
            .subscribeOn(schedulers().io())
            .observeOn(schedulers().ui())
            .delay(DELAY_VALUE,TimeUnit.SECONDS)
            .timeout(5, TimeUnit.SECONDS)
            .subscribe(status -> hideErrorInformation(),
                    error -> showErrorInformation()
            );
    disposables().add(disposable);
android multithreading rx-java2 android-runonuithread
1个回答
0
投票

您在delay之后应用了observeOn,因此流程已从UI线程切换开。删除observeOn并按以下顺序重新排序流程:

Disposable disposable = Single.concat(
        getClearStorageObservable()
                .doOnError(Timber::e)
                .onErrorResumeNext(Single.just(false)),
        getDownloadObservable())
        .subscribeOn(schedulers().io())
        .timeout(5, TimeUnit.SECONDS, schedulers().ui())
        .delay(DELAY_VALUE, TimeUnit.SECONDS, schedulers().ui())
        .subscribe(status -> hideErrorInformation(),
                error -> showErrorInformation()
        );
disposables().add(disposable);
© www.soinside.com 2019 - 2024. All rights reserved.