Observable订阅rxjava时的NetworkOnMainThreadException

时间:2017-02-23 09:51:07

标签: java android rx-java observable rx-java2

我正在使用Rxjava2,

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

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();
            });

}

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

1 个答案:

答案 0 :(得分:6)

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

.subscribeOn(Schedulers.io())

实际上,看起来你正在为updateProfile执行此操作....只需要为createUser执行此操作