提问人:SSHEX 提问时间:2/4/2020 更新时间:2/4/2020 访问量:281
在这种情况下如何在 MainThread 上运行 doOnSubscribe
How run doOnSubscribe on MainThread in this case
问:
我想在主线程上执行doOnSubscribe块。 我正在尝试这个:
fun test(){
Single
.fromCallable {
print(Thread.currentThread())
getCachedProfile()
}
.observeOn(AndroidSchedulers.mainThread())
.flatMap {
print(Thread.currentThread())
api
.getProfile()
.doOnSubscribe {
print(Thread.currentThread())
}
.observeOn(Schedulers.io())
.map {
print(Thread.currentThread())
it.profile
}
.map { it.id }
.flatMap { photoId ->
print(Thread.currentThread())
api
.getPhotos(photoId)
.map { it.toDomain() }
}
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchdulers.mainThread())
}
doOnSubscribe 在主线程上运行,但 .getProfile() 也在 UI 线程上运行,我收到错误 NetworkOnMainThreadException。如何设置调度程序,以便在主线程上执行 doOnSubscribe,并在 IO 线程上运行 getProfile()
答:
0赞
DevJZ
2/4/2020
#1
添加到您的通话中
所以.subscribeOn(Schedulers.io)
.getProfile()
.getProfile().subscribeOn(Schedulers.io).observeOn(AndroidSchedulers.mainThread().doOnSubscribe()
这就是它在 java 中完成的方式,我想 Kotlin 也有同样的情况。
.doOnSubscribe{}
在执行任务之前调用要执行的操作
.subscribeOn()
告诉要在哪个线程上执行工作
评论