我的代码是这样的:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
adapter.notifyDataSetChanged()
})
但我得到一个错误:只有创建 View 层次结构的原始线程才能触及它的 View 。 所以我将其更改为:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
runOnUiThread(Runnable {
adapter.notifyDataSetChanged()
})
}
很有道理。所以我很困惑。
我原以为 .observeOn(AndroidSchedulers.mainThread())
意味着订阅 block 中的代码在 ui 线程上运行,但我怎么会得到这个错误?
最佳答案
这里的代码有问题:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
您不能像您注意到的那样在 UI 线程上订阅,您会得到一个异常:
Only the original thread that created a view hierarchy can touch its views.
你应该做的是在 I/O 线程上订阅并在 UI 线程上观察:
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ()
关于android - Rxjava AndroidSchedulers.mainThread() 表示 UI 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027712/