当 Observable 订阅 rxjava 时出现 NetworkOnMainThreadException

NetworkOnMainThreadException when Observable subscrible rxjava

我正在使用 Rxjava2,

我在 RxJava 中使用 flatmap,结构如下:

Observable1.flatmap() 和 return 到 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();
            });

}

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

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

.subscribeOn(Schedulers.io())

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

也这样做