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