Rxjava AndroidSchedulers.mainThread()意味着UI线程?

All*_*ork 11 android rx-java

我的代码是这样的:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
    adapter.notifyDataSetChanged()
})
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:只有创建视图层次结构的原始线程才能触及其视图. 所以我把它改成:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
        runOnUiThread(Runnable {
            adapter.notifyDataSetChanged()
 })
 }
Run Code Online (Sandbox Code Playgroud)

这很有道理.所以我很困惑.我曾经想过.observeOn(AndroidSchedulers.mainThread())订阅块中的代码在ui线程上运行,但我是如何得到这个错误的?

mmB*_*mBs 7

问题出在这里的代码:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
Run Code Online (Sandbox Code Playgroud)

你注意到你不能在UI线程上订阅,你会得到一个例外:

只有创建视图层次结构的原始线程才能触及其视图.

你应该做的是订阅I/O线程并观察UI线程:

.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ()
Run Code Online (Sandbox Code Playgroud)