【发布时间】:2025-12-21 08:00:06
【问题描述】:
让我从示例代码 sn-ps 开始
suspend fun executeLive(result: MutableLiveData<Person>) {
val response = ... //suspend api request
mediatorLiveData.removeSource(response)
mediatorLiveData.addSource(response) {
result.value = sortData(it) // sortData is also suspend function which sortData at Dispatcher.Default
}
}
在这个例子中,sortData 不能在lambda function 下调用(在这种情况下是addSource)。而且我已经将executeLive 声明为suspend,这就是为什么suspend api 请求可以从第一的。但是sortData函数显示编译时错误
挂起函数只能从协程体中调用
那么我该如何改变我的代码结构来解决这个问题呢?
更新:有没有关于这方面的文章?
【问题讨论】:
-
你可以
launch一个协程来设置结果的值。但是您应该可以访问适当的CoroutineScope以避免泄漏。 -
你可以试试
runBlocking { ... }
标签: android kotlin android-livedata kotlin-coroutines