如何解决暂停执行,直到通过LiveData设置对象值为止
我正在使用第三方SDK,该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不为null时,才能继续执行其余的过程。如何使用Kotlin协程实现这一目标?
解决方法
如果要等待结果,则函数必须可挂起。使用suspendCoroutine
获取延续并从回调中恢复它:
suspend fun setValueAndDoSomething(activity: FragmentActivity) {
val myCustomObject = suspendCoroutine<MyCustomObject> { cont ->
sdkComponent.observe(activity,Observer { sdkResult ->
cont.resume(MyCustomObject(sdkResult))
})
}
myCustomObject.doSomething()
}
要调用此功能,您必须launch
一个协程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。