首页 > 解决方案 > 暂停执行,直到通过 LiveData 设置对象值

问题描述

我正在使用第三方 SDK,它具有我需要观察的 LiveData 对象以设置我的自定义对象的值:

    fun setValueAndDoSomething(activity: FragmentActivity) {
        var myCustomObject: MyCustomObject? = null
        sdkComponent.observe(activity, Observer { sdkResult ->
            myCustomObject = MyCustomObject(sdkResult)
        })
        
        // Wait until myCustomObject is not null
        myCustomObject.doSomething()
    }

我想等到 SDK LiveData 的回调被触发,以便 myCustomObject 不为空,才能继续执行其余的操作。如何使用 Kotlin Coroutines 实现这一目标?

标签: androidkotlinandroid-livedatakotlin-coroutines

解决方案


如果你想等待结果,你的函数必须是可挂起的。用于suspendCoroutine获取延续并从回调中恢复:

suspend fun setValueAndDoSomething(activity: FragmentActivity) {
    val myCustomObject = suspendCoroutine<MyCustomObject> { cont ->
        sdkComponent.observe(activity, Observer { sdkResult ->
            cont.resume(MyCustomObject(sdkResult))
        })
    }
    myCustomObject.doSomething()
}

为了能够调用它,您必须launch使用协程。


推荐阅读