gpt4 book ai didi

android - 如何使用协程将数据从存储库传递到 ViewModel

转载 作者:行者123 更新时间:2023-12-04 23:59:15 25 4
gpt4 key购买 nike

This问题给了我一个大概的想法,但我仍在苦苦挣扎。

我的 fragment -

// Reset email sent observer
viewModel.isEmailSent.observe(viewLifecycleOwner, { flag ->
onResetMailSent(flag)
})

我的 ViewModel -

val isMailSent: MutableLiveData<Boolean> = MutableLiveData(false)

isEmailSent = liveData {
emit(firebaseAuthRepo.sendPasswordResetMail(emailId))
}

我的仓库-

suspend fun sendPasswordResetMail(emailId: String): Boolean {
firebaseAuth?.sendPasswordResetEmail(emailId)
?.addOnCompleteListener {
if (it.isSuccessful) { }
}
?.addOnFailureListener {

}
}

问题-

  1. 如何通知 View 模型已调用存储库的“addOnCompleteListener”或“addOnFailureListener”?我正在考虑返回一个 bool 标志,但似乎无法在监听器中放置“返回”语句。

  2. IDE 说 'suspend' 修饰符是多余的。这是为什么?

最佳答案

您可以使用 suspendCoroutine在这种情况下,它基本上将作为一个钩子(Hook)工作,您可以使用 Continuation 对象处理回调内容。我们需要它,因为 firebaseAuth 已经在一个单独的线程上运行。试试下面的方法

suspend fun sendPasswordResetMail(emailId: String): Boolean {
return withContext(Dispatchers.IO) {
suspendCoroutine { cont ->
firebaseAuth?.sendPasswordResetEmail(emailId)
?.addOnCompleteListener {
cont.resume(it.isSuccessful)
}
?.addOnFailureListener {
cont.resumeWithException(it)
}
}
}
}

关于android - 如何使用协程将数据从存储库传递到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68114998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com