当 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
也这样做
我正在使用 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