将 OkHttp 与 RxJava2 结合使用时出现 NetworkOnMainThreadException
NetworkOnMainThreadException using OkHttp with RxJava2
我正在努力学习 Rxjava2。我在使用 okHttp 进行网络调用期间遇到一个问题,即 NetworkOnMainThreadException。我必须只使用 okHttp 库。
这是我的方法,我在其中编写了用于调用登录的 RxJava2 代码 API。
@Override
public void onServerLoginClick(LoginRequest.ServerLoginRequest serverLoginRequest) {
HttpParamObject httpParamObject = ApiGenerator.onServerLogin(serverLoginRequest);
Service service = ServiceFactory.getInstance(activity, AppConstants.TASKCODES.LOGIN);
try {
Observable.just(service.getData(httpParamObject))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<? super Object>) getObserver());
} catch (JSONException | IOException | RestException | SQLException e) {
e.printStackTrace();
}
}
private Subscriber<LoginResponse> getObserver(){
return new Subscriber<LoginResponse>() {
@Override
public void onSubscribe(Subscription s) {
}
@Override
public void onNext(LoginResponse loginResponse) {
getUiView().showToast(loginResponse.getMessage());
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
};
}
我是不是做错了什么或遗漏了什么?请帮助我。
只需删除 Observable.just() 如下
service.getData(httpParamObject)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<? super Object>) getObserver());
您在主线程中调用 service.getData(httpParamObject)
并将结果传递给 Observable.just
。所以你的subscribeOn
没有效果。
检查 Observable.create 的文档并使用它代替 Observable.just
我正在努力学习 Rxjava2。我在使用 okHttp 进行网络调用期间遇到一个问题,即 NetworkOnMainThreadException。我必须只使用 okHttp 库。
这是我的方法,我在其中编写了用于调用登录的 RxJava2 代码 API。
@Override
public void onServerLoginClick(LoginRequest.ServerLoginRequest serverLoginRequest) {
HttpParamObject httpParamObject = ApiGenerator.onServerLogin(serverLoginRequest);
Service service = ServiceFactory.getInstance(activity, AppConstants.TASKCODES.LOGIN);
try {
Observable.just(service.getData(httpParamObject))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<? super Object>) getObserver());
} catch (JSONException | IOException | RestException | SQLException e) {
e.printStackTrace();
}
}
private Subscriber<LoginResponse> getObserver(){
return new Subscriber<LoginResponse>() {
@Override
public void onSubscribe(Subscription s) {
}
@Override
public void onNext(LoginResponse loginResponse) {
getUiView().showToast(loginResponse.getMessage());
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
};
}
我是不是做错了什么或遗漏了什么?请帮助我。
只需删除 Observable.just() 如下
service.getData(httpParamObject)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<? super Object>) getObserver());
您在主线程中调用 service.getData(httpParamObject)
并将结果传递给 Observable.just
。所以你的subscribeOn
没有效果。
检查 Observable.create 的文档并使用它代替 Observable.just