NetworkOnMainThreadException时可观察subscrible rxjava
问题描述:
我与Rxjava2工作,NetworkOnMainThreadException时可观察subscrible rxjava
我在RxJava使用flatmap
下面的结构:
Observable1.flatmap()
并返回到可观察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
+0
这很有帮助,但尚未解决。 –
+0
在添加之后,您仍然获得了'NetworkErrorOnMainThread'?你可以添加你得到的完整错误+你的更新代码。 –
您不应在MainThread上运行任何网络调用,请使用单独的线程。 –
Cmon,它已经被回答了很多次... http://*.com/questions/34349334/rxjava-and-retrofit2-networkonmainthreadexception http://*.com/questions/27687907/android-os-networkonmainthreadexception-使用-rxjava-on-android http://*.com/questions/33390532/networkonmainthreadexception-with-retrofit-beta2-and-rxjava http://*.com/questions/23447077/android-rxjava-non-blocking – Than