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
是你工作的地方,
这是代码
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
是你工作的地方,