android - 尽管正确调用了observeOn(io线程),但RxJava NetworkOnMainThreadException
问题描述
这是代码
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 线程上运行,然后将结果返回给 ui 线程。这段代码甚至可以在 io 线程上运行吗?我很困惑。
解决方案
尽管正确调用了observeOn(io线程)
不正确,您的代码应为:
.subscribeOn(getSchedulerProvider().io()) //do work on the io thread
.observeOn(getSchedulerProvider().ui()) //apply changes to ui thread
永远记住那subscribeOn
是你工作的地方,秩序很重要
推荐阅读
- eclipse - NatTable:如何访问特定列的列标题?
- user-interface - 如何向我现有的(工作的)简单的 AutoHotKey GUI 窗口脚本添加一个复选框?
- spring-boot - Hibernate Envers 从请求中设置用户名
- php - 如何根据温度显示不同的颜色?
- postgresql - 错误:复制引号必须是单个单字节字符
- php - /broadcasting/auth 处 Laravel 419 页面过期错误,但添加了 csrfToken LARAVEL NOTIFICATIONS
- php - 关于意外 else 语句错误的问题
- html - 滚动按钮未居中
- php - 使用 Cron 运行的 PHP 脚本检索我的 Google 日历事件
- javascript - 我有一个数字,我想在每个数字上加上一个跨度。我必须在 javascript 中执行此操作