NetworkOnMainThreadException using OkHttp with RxJava2

最后都变了- 提交于 2019-12-02 23:11:35

问题


I am trying to learn Rxjava2. I am facing a problem i.e, NetworkOnMainThreadException during network call using okHttp. I have to use only okHttp libary.

This is my method where I have written the code of RxJava2 for calling 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() {

        }
    };

}

Am I doing something wrong or missing anything? Please help me.


回答1:


You're calling service.getData(httpParamObject) in the main thread and passing that result to Observable.just. So your subscribeOn has no effect.

Check the documentation of Observable.create and use it instead of Observable.just




回答2:


just remove Observable.just() as follows

  service.getData(httpParamObject)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe((Consumer<? super Object>) getObserver());


来源:https://stackoverflow.com/questions/47900927/networkonmainthreadexception-using-okhttp-with-rxjava2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!