Observable订阅rxjava时的NetworkOnMainThreadException

Huy*_*wer -3 java android observable rx-java rx-java2

我正在使用Rxjava2,

flatmap在RxJava中使用以下结构:

Observable1.flatmap() 并返回Observable 2.

如下代码:

getApi().createUser(os, deviceToken)
            .compose(view.regisObserver())
            .subscribeOn(Schedulers.io())
            .flatMap(result -> {
                String user_token = result.data.user_token;
                getPreferenceStore().setAuthToken(user_token);

                setReadPolicy();

                Observable<ObjectDto<UserProfile>> obs = getApi().updateProfile(null, null, null);
                        obs.compose(view.regisObserver());

                return obs;
            })
            .subscribe(result-> {
                getPreferenceStore().setUserId(result.data.user_id);

            //                    view.onUpdateProfile();
            }, Throwable::printStackTrace);

@Override
public <T> ObservableTransformer<T, T> regisObserver() {
    return observable -> observable.compose(prepare())
            .doOnSubscribe(disposable -> showProgressDialog())
            .doOnComplete(this::closeProgressDialog)
            .doOnError(throwable -> {
                if (BuildConfig.DEBUG) {
                    throwable.printStackTrace();
                }
                showProgressDialog();
                closeProgressDialog();
            });

}
Run Code Online (Sandbox Code Playgroud)

代码编译没有错误.它在运行时出错NetworkErrorOnMainThread.我不知道如何解决它.

Joh*_*lly 6

您需要指定要在非UI线程上订阅...例如

.subscribeOn(Schedulers.io())
Run Code Online (Sandbox Code Playgroud)

实际上,看起来你正在这样做updateProfile....只需要也为此做createUser


归档时间:

查看次数:

352 次

最近记录:

8 年,9 月 前