使用带有RxJava2的OkHttp的NetworkOnMainThreadException

问题描述 投票:-1回答:2

我正在努力学习Rxjava2。我在使用okHttp进行网络调用期间遇到了一个问题,即NetworkOnMainThreadException。我只能使用okHttp库。

这是我编写RxJava2代码以调用Login 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() {

        }
    };

}

我做错了什么或遗失了什么?请帮我。

android okhttp rx-java2
2个回答
2
投票

你在主线程中调用service.getData(httpParamObject)并将结果传递给Observable.just。所以你的subscribeOn没有效果。

查看Observable.create的文档并使用它代替Observable.just


-2
投票

只需删除Observable.just(),如下所示

  service.getData(httpParamObject)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe((Consumer<? super Object>) getObserver());
© www.soinside.com 2019 - 2024. All rights reserved.