gpt4 book ai didi

firebase - 如何在 firebase 数据库中使用 kotlin 协程

转载 作者:行者123 更新时间:2023-12-02 11:49:01 27 4
gpt4 key购买 nike

我正在尝试使用 Firestore 和协程访问聊天室。

    fun getOwner() {
runBlocking {
var de = async(Dispatchers.IO) {
firestore.collection("Chat").document("cF7DrENgQ4noWjr3SxKX").get()
}
var result = de.await().result
}

但我得到这样的错误:
E/AndroidRuntime: FATAL EXCEPTION: Timer-0
Process: com.example.map_fetchuser_trest, PID: 19329
java.lang.IllegalStateException: Task is not yet complete
at com.google.android.gms.common.internal.Preconditions.checkState(Unknown Source:29)
at com.google.android.gms.tasks.zzu.zzb(Unknown Source:121)
at com.google.android.gms.tasks.zzu.getResult(Unknown Source:12)
at com.example.map_fetchuser_trest.model.Repository$getOwner$1.invokeSuspend(Repository.kt:53)

我怎样才能得到聊天文件?当我使用下面的 origin api 时,我可以访问聊天室文档。
        firestore.collection("Chat").document(
"cF7DrENgQ4noWjr3SxKX"
).get().addOnCompleteListener { task ->
if (task.isSuccessful) {
val chatDTO = task.result?.toObject(Appointment::class.java)
}
}

最佳答案

Task是人们等待的东西,但你将它包裹在另一层 async 中.删除 async :

fun getOwner() {
runBlocking {
var de = firestore.collection("Chat").document("cF7DrENgQ4noWjr3SxKX").get()
var result = de.await().result
}
}

但是,通过使用 runBlocking()你已经开枪打死了自己,并编写了只是正式使用异步 API 而没有好的效果的阻塞代码。

要真正从中受益,您必须拥有
suspend fun getOwner() = firestore
.collection("Chat")
.document("cF7DrENgQ4noWjr3SxKX")
.get()
.await()
.result

launch在您调用它的地方的协程:
launch {
val owner = getOwner()
// update the GUI
}

这假设您正在调用 launch来自 CoroutineScope 的对象.

关于firebase - 如何在 firebase 数据库中使用 kotlin 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204428/

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