我正在使用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
出错。我不知道如何解决它。
答案 0 :(得分:6)
您需要指定要在非UI线程上订阅...例如
.subscribeOn(Schedulers.io())
实际上,看起来你正在为updateProfile
执行此操作....只需要为createUser
执行此操作