android - 只有创建 View 层次结构的原始线程才能触及它的 View 。更新然后崩溃

标签 android kotlin

我遇到了一个问题,我不知道为什么。

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/

相关文章:

android - 为什么我可以在 Kotlin 中不传递参数名称来调用一个 fun?

android - 位置一开始是空的

单击时启动 Activity 的android小部件

android - flutter : How can I add divider between each List Item in my code?

java - 我们如何监听 Android 中的位置权限更改(不触发权限请求)?

android - Espresso Web - 如何单击未命名 Web View 中的元素

android - 搜索特定的 Play 商店类别

android - Android:MediaPlayer-免提音量

Android 暗模式文本颜色在 RecyclerView 行文件中未更改

android - 如何在Kotlin中将listView转换为RecyclerView