首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从RxAndroid访问项目布局?

从RxAndroid访问项目布局?
EN

Stack Overflow用户
提问于 2018-06-12 22:27:36
回答 2查看 43关注 0票数 0

我使用的代码如下:

代码语言:javascript
复制
    mCompositeDisposable.add(myObservable(IdLang, shortTermCoursesModels)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableObserver<String>() {
                @Override
                public void onComplete() {
                }

                @Override
                public void onError(Throwable e) {
                }

                @Override
                public void onNext(String string) {
                    listenerCoursesListItemService.adapterHideProgress();
                }
            }));

和:

代码语言:javascript
复制
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 {
            listenerCoursesListItemService.adapterShowProgress();
            for (int i = 0; i < 900000; i++) {
                Log.i("WWWWWWWW", "A " + i);
            }
            return Observable.just("ok");
        }
    });

但请告诉我下面的错误:

代码语言:javascript
复制
 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

如何从RxAndroid访问UI

我的错误是:

代码语言:javascript
复制
listenerCoursesListItemService.adapterShowProgress();
listenerCoursesListItemService.adapterHideProgress();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-13 12:48:45

原因是您正在尝试显示进度->

代码语言:javascript
复制
listenerCoursesListItemService.adapterShowProgress(); 

内部调用()方法,它实际上运行在不同的线程(Schedulers.io())上,而不是UI线程(AndroidSchedulers.mainThread())上。

相反,您可以在doOnSubscribe()方法中显示进度,并在onComplete()中忽略它。这两个方法都将在UI线程上调用。更新了下面的代码以供参考,

代码语言:javascript
复制
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) {
        }
    }));

和:

代码语言:javascript
复制
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()方法返回的字符串。

票数 0
EN

Stack Overflow用户

发布于 2018-06-13 06:15:53

您必须对主线程执行subscribeOn操作:

代码语言:javascript
复制
mCompositeDisposable.add(myObservable(IdLang, shortTermCoursesModels)
        .subscribeOn(AndroidSchedulers.mainThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableObserver<String>() {
            @Override
            public void onComplete() {
            }

            @Override
            public void onError(Throwable e) {
            }

            @Override
            public void onNext(String string) {
                listenerCoursesListItemService.adapterHideProgress();
            }
        }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50819626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档