我在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 store中检索信息,并将其映射到一个对象
但是在上面的函数中,我无法返回x,因为它说x未解析
我的数据类如下:
data class docretreving(
val Docs : ArrayList<String> = arrayListOf<String>()
)
如何编写这样的代码,我可以返回值x,这是一个数组列表从我的函数uploaded_docs_retrival()
编辑以下工作代码:-
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()
}
}
调用wait()
而不是添加成功侦听器。将其包装在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
}
}
如果您没有访问wait()扩展函数的权限,请在内部版本中添加此依赖项。格拉德尔:
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.0"
您将获得“x未解析”,因为“val x”的范围在for循环中。
您将无法在循环和侦听器之外访问它。
获取字符串列表的最佳方法是将监听器作为参数传递给方法。您也可以传递“成功监听器”来获取值。
覆盖suspend fun Upload\u docs\u retrival(侦听器:SuccessListener)=Firebase。firestore。集合(“配置文件”)。其中,equalto(“uid”,“$uid”)。get()。addOnSuccessListener(侦听器)
问题内容: 给定布局 有没有一种方法可以将侦听器添加到活动中的任何新“线程”插入中,例如/ activity / * / thread? 当添加了新的活动时,我正在获取这些活动的提要,但是在附加线程时,不会触发任何事件。我是否需要将[thread]部分移到它自己的根目录下,并将线程ID与活动ID匹配,才能知道何时针对主活动线程进行线程注释? 问题答案: 根据您的评论更新答案。 您想听: 与其嵌套,
我有一个有2个元素的回收器视图。我想添加2个按钮来做不同的事情(取决于回收器视图的哪个元素。怎么可能做到这一点?我的元素是文本视图 设置ctiv.kt 我的适配器。kt
这个函数总是返回null. t是不被分配与令牌值.有人能帮助请?
问题内容: 这个问题已经在这里有了答案 : Android-处理EditText中的“ Enter” (28个答案) 5个月前关闭。 如果我有一个EditText,并且我想听用户是否按下了键盘上的“完成”按钮,该如何做? 问题答案: 代码是 在那个“ edittext”是文本字段的ID 查看此链接,只需将setOnKeyListener设置为您的editText即可。
我有jbpm系统(),我想在系统内使用一个全局的。我创建了简单的过程事件lestener: 我的pom。xml: 当我将其添加为部署依赖项并通过工作台将其声明为jbpm项目中的事件监听器时,一切都运行正常。 但是现在我有很多项目,把事件监听器附加到每个项目上很不舒服。因此,我在wildfly中创建了新模块: 已创建部署描述符。xml服务器级别: 因此,当我创建一个新的jbpm进程并通过工作台将其部
问题内容: 这个问题已经在这里有了答案 : 执行功能后,Python脚本返回意外的“无” [重复] (3个答案) 7年前关闭。 输出量 我不想要“无”,那么 如何执行一行代码以返回输入列表中的项目? 我试过了: 但这不起作用,因为return语句不能那样工作 问题答案: 您正在打印的返回码是。只需致电即可。