我遇到了一个问题,我不知道为什么。
Only the original thread that created a view hierarchy can touch its views
在我的 fragment 中,我有一个方法 OnUserImageClicked
override fun OnUserNumberClicked(photo: UserPicture) {
subscriptions.add(
mRepository.userPicture()
.subscribeOn(Schedulers.io())
.subscribe {
userListener.updateUserNumber()
}
)
}
userListener 是其他presenter 中的一个接口(interface),有下面这些方法
interface UserListener {
fun updateUserNumber()
}
private var userListener = object : UserListener {
override fun updateUserPicture() {
fetchUserNumber()
}
}
在演示者中我有以下方法 fetchNumberOfPictureSelected()
fun fetchUserNumber(): Int {
subscriptions.add(mRepository.getUserNumber()
.subscribeOn(Schedulers.io())
.subscribe (
{ number -> view?.updateNumber(number) },
{ // ErrorCode here }
)
)
}
然后我的 fragment 我有以下代码: userNumberUpdate.text = 数字
所以在我的模拟器上,当我点击“OnUserNumberClicked”方法时,号码会更新,但之后应用会崩溃。 你能帮助我吗 ?
最佳答案
您需要使用 AndroidSchedulers.mainThread()
观察主线程上的 UI 调用。
override fun OnUserNumberClicked(photo: UserPicture) {
subscriptions.add(
mRepository.userPicture()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
userListener.updateUserNumber()
}
)
}
关于android - 只有创建 View 层次结构的原始线程才能触及它的 View 。更新然后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038702/