KOTLIN: android .view.ViewRootImpl $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений - PullRequest
0 голосов
/ 12 марта 2020

У меня есть этот код:

    lifecycleScope.launch(Dispatchers.Default) {
        val specialMessage = URL("https://finepointmobile.com/api/inventory/v1/message").readText()
        d("Globby", "The message is: $specialMessage")
        lastSavedProduct.text = specialMessage                //line 41
    }

Но при выполнении я получаю следующую ошибку:

ERROR : android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
        at com.example.MainActivity$onCreate$2.invokeSuspend(MainActivity.kt:41)

Я пытался изменить lifecycleScope.launch(Dispatchers.IO) на lifecycleScope.launch(Dispatchers.Default), но это не так работа.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Если я правильно помню сопрограммы, то должно работать следующее:

lifecycleScope.launch { // runs on Main by default
    val specialMessage = withContext(Dispatchers.IO) {
        URL("https://finepointmobile.com/api/inventory/v1/message").readText()
    } 
    lastSavedProduct.text = specialMessage
}
0 голосов
/ 12 марта 2020

Попробуйте это

// Make a CoroutineContext variable
val main: CoroutineContext by lazy { Dispatchers.Main }

и используйте его в своем коде

lifecycleScope.launch(main) {
    val specialMessage = URL("https://finepointmobile.com/api/inventory/v1/message").readText()
    d("Globby", "The message is: $specialMessage")
    lastSavedProduct.text = specialMessage //line 41
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...