【问题标题】:NetworkOnMainThreadException using OkHttp with RxJava2NetworkOnMainThreadException 使用带有 RxJava2 的 OkHttp
【发布时间】:2017-12-20 07:34:15
【问题描述】:

我正在尝试学习 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() {

        }
    };

}

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

【问题讨论】:

标签: android okhttp rx-java2


【解决方案1】:

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

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

【讨论】:

  • 请给个完整的例子。我阅读了 Observable.create ,但不知道该怎么做(只发出一项)。
  • 您可以在我在答案中发布的文档中找到多种语言的完整示例...
  • 使用 rxjava2,我正在寻找的是 'fromCallable(...)'。
【解决方案2】:

只需删除 Observable.just() 如下

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

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 2017-01-21
    • 2019-12-11
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2018-12-29
    相关资源
    最近更新 更多