我正试图从一个协同程序触发对LiveData的更新:

object AddressList: MutableLiveData<List<Address>>()
fun getAddressesLiveData(): LiveData<List<Address>> {
    AddressList.value = listOf()
    GlobalScope.launch {
        AddressList.value = getAddressList()
    }
    return AddressList
}

但我得到了以下错误:

IllegalStateException:无法在后台线程上调用setValue

有没有办法让它与协同程序一起工作?

推荐答案

使用liveData.postValue(value)而不是liveData.value = value.它被称为异步.

From documentation:

postValue - Posts a task to a main thread to set the given value.

Kotlin相关问答推荐

如何让 LocalDateTime.parse 拒绝 24:00 时间

如何在 Kotlin 中初始化 Short 数组?

Spring Boot Kotlin 数据类未使用 REST 控制器中的默认值初始化

如何将光标从一个文本字段传递到 Jetpack Compose 中的其他文本字段?

mutableStateOf 在 Jetpack Compose 中不记住 API 的情况下保持重组后的值

在 Kotlin 中,我可以在集合上有一个条件构建器元素吗?

正则表达式 FindAll 不打印结果 Kotlin

Kotlin 中获取类简单名称的最佳实践

SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加com.fasterxml.jackson.module: jackson-module-kotlin

基类中的 ViewModelProviders.get(...)

将 Gradle 子元素与 Kotlin 多平台一起使用

使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件

在粘贴时将 java 转换为 kotlin

Android Studio 4.0.0 Java 8 库在 D8 和 R8 构建错误中脱糖

如何在顶级函数中使用 koin 注入依赖项

Kotlin get字段注释始终为空

spring.config.location 在 Spring Boot 2.0.0 M6 上不起作用

在android的默认浏览器 Select 列表中添加我的浏览器?

将 Double 转换为 ByteArray 或 Array Kotlin

在 Android 12 (SDK 31) 中获取 android.app.ForegroundServiceStartNotAllowedException