我的代码是这样的:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
adapter.notifyDataSetChanged()
})
但是我收到了一个错误:只有创建视图层次结构的原始线程才能触及其视图。 所以我把它改成:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
runOnUiThread(Runnable {
adapter.notifyDataSetChanged()
})
}
这很有道理。所以我很困惑。
我以为.observeOn(AndroidSchedulers.mainThread())
意味着订阅块中的代码在ui线程上运行,但我是如何得到这个错误的?
答案 0 :(得分:6)
问题出在这里的代码:
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
你注意到你不能在UI线程上订阅,你会得到一个例外:
只有创建视图层次结构的原始线程才能触及其视图。
您应该做的是订阅I / O线程并在UI线程上观察:
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ()
答案 1 :(得分:0)
类似的事情会起作用:
observerable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) //works Downstream
.subscribe ({
adapter.notifyDataSetChanged()
})