Только оригинальный поток, создавший иерархию представлений, может касаться его представлений.Обнови потом Crash - PullRequest
1 голос
/ 21 сентября 2019

Я столкнулся с проблемой и не знаю почему.

Only the original thread that created a view hierarchy can touch its views

в моем фрагменте у меня есть метод OnUserImageClicked

override fun OnUserNumberClicked(photo: UserPicture) {

    subscriptions.add(
        mRepository.userPicture()
            .subscribeOn(Schedulers.io())
            .subscribe {
                userListener.updateUserNumber()
            }
    )
}

userListener - это интерфейс в другомведущий, у которого есть следующий метод

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 }
        )
    )
}

тогда мой фрагмент у меня есть следующий код: userNumberUpdate.text = number

Так что в моем эмуляторе, когда я нажимаю на метод "OnUserNumberClicked", номер обновляется, но приложение вылетает после.Можешь мне помочь ?

1 Ответ

3 голосов
/ 21 сентября 2019

Вы должны наблюдать за вызовами пользовательского интерфейса в главном потоке, используя AndroidSchedulers.mainThread().

override fun OnUserNumberClicked(photo: UserPicture) {
    subscriptions.add(
        mRepository.userPicture()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                userListener.updateUserNumber()
            }
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...