gpt4 book ai didi

android - 返回 kotlin 中成功监听器的 add 内部的值

转载 作者:行者123 更新时间:2023-12-05 00:17:48 26 4
gpt4 key购买 nike

我在 kotlin 函数中获取返回类型时遇到问题

函数是

 override suspend fun uploaded_docs_retrival() : ArrayList<String> {

Firebase.firestore.collection("profiles").whereEqualTo("uid", "$uid").get()
.addOnSuccessListener { result ->
for (document in result) {
val myObject = document.toObject(docretreving::class.java)
val x = myObject.Docs
}

}
return x
}

在这里,我从 Fire 存储中检索信息并将其映射到对象

但是在上面的函数中我无法返回 x,因为它说 x 未解析

我的数据类如下:

data class docretreving(
val Docs : ArrayList<String> = arrayListOf<String>()

)

如何编写代码,以便可以从函数 uploaded_docs_retrival() 返回值 x,它是一个数组列表

编辑以下有效代码:-

override suspend fun uploaded_docs_retrival() : ArrayList<String> {
return try {
val result = Firebase.firestore.collection("profiles").whereEqualTo("uid", "$uid").get()
.await()
result.first().toObject(docretreving::class.java).Docs
} catch(e: Exception) {
Log.e("TAG", "Failed to upload: ${e.message.orEmpty()}")
ArrayList()
}
}

最佳答案

调用 await() 而不是添加成功监听器。将其包装在 try/catch 中,因为失败时会引发异常。

我不确定 Firestore 可以返回多个项目时您为何要返回单个项目。我只取下面结果中的第一项:

override suspend fun uploaded_docs_retrival() : ArrayList<String> {
return try {
val result = Firebase.firestore.collection("profiles").whereEqualTo("uid", "$uid").get()
.await()
require(result.isNotEmpty()) { "No values returned." }
result.first().toObject(docretreving::class.java).Docs
} catch(e: Exception) {
Log.e(TAG, "Failed to upload: ${e.message.orEmpty()}")
ArrayList() // or you can rethrow or return null if you want
}
}

如果您无权访问 await() 扩展函数,请在 build.gradle 中添加此依赖项:

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.0"

关于android - 返回 kotlin 中成功监听器的 add 内部的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71592766/

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