RxJava NetworkOnMainThreadException 尽管正确调用了 observeOn(io thread)

RxJava NetworkOnMainThreadException despite correctly calling observeOn(io thread)

这是代码

        getCompositeDisposable().add(Single.fromCallable(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    URL url = new URL(pageUrl);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    int code = connection.getResponseCode(); // <- crashes here
                    return code == 200;
                }
            })
                    .observeOn(getSchedulerProvider().io())
                    .subscribeOn(getSchedulerProvider().ui())
                    .subscribe((pageAvailable) -> {
                        boolean useCache = !pageAvailable;
                        getMvpView().loadPage(useCache, pageUrl);
                    }, Timber::e)
    );

无法理解这里的问题是什么。网络代码在 io 线程上应该是 运行,然后 return 结果到 ui 线程。这段代码甚至 运行s 在 io 线程上吗?我很困惑。

despite correctly calling observeOn(io thread)

不正确,您的代码应该是:

  .subscribeOn(getSchedulerProvider().io()) //do work on the io thread
  .observeOn(getSchedulerProvider().ui()) //apply changes to ui thread

永远记住 subscribeOn 是你工作的地方,