将 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