android - 是否可以使用 toObject 和 object 作为参数从 firestore 检索数据?

标签 android firebase kotlin google-cloud-platform google-cloud-firestore

我有一个项目,我在其中从 Firestore 读取数据。我有几个集合,所以我成功地使用了 toObject 。现在,只是为了好玩(和节省代码),我想创建一个全局函数,用于读取数据并将我想要获取的对象类型作为参数发送。

我知道我忘记了一些东西,但我无法弄清楚,也许这是不可能的。

这是我的尝试,但出现错误:未解析的引用类。我知道我忘记了一些东西,但我无法弄清楚,也许这是不可能的。

    fun todosRegistros(coleccion: String, orden: String, clase: Class<Any>):Any{
        // Cargamos los supermercados
        db.collection(coleccion).orderBy(orden).get().addOnSuccessListener { registros ->
            for (registroIt in registros) {
                val item = registroIt.toObject<clase>()
            }
        }
    }  

最佳答案

您不能将clase指定为泛型类型。您应该调用 QueryDocumentSnapshot#toObject(java.lang.Class)Class 类型的对象作为参数的函数。因此,在您的代码中,您应该进行以下更改:

fun todosRegistros(coleccion: String, orden: String, clase: Class<Any>):Any{
    // Cargamos los supermercados
    db.collection(coleccion).orderBy(orden).get().addOnSuccessListener { registros ->
        for (registroIt in registros) {
            val item = registroIt.toObject(clase)
            //                              👆
        }
    }
}

编辑:

我想我明白了。您要查找的内容名为 generic functions 。所以在代码中应该是:

fun <T> todosRegistros(coleccion: String, orden: String, clase: Class<T>):T{
    // Cargamos los supermercados
    questionsRef.orderBy(orden).get().addOnSuccessListener { registros ->
        for (registroIt in registros) {
            val item = registroIt.toObject(clase)
            //                              👆
        }
    }
}

现在您可以使用以下方式调用该函数:

todosRegistros("Tipo","nombre", Class<Tipo>)

另外,不要忘记添加以下导入:

import java.lang.Class

关于android - 是否可以使用 toObject 和 object 作为参数从 firestore 检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76764917/

相关文章:

java - android聊天缩略图位置

android - 在 Android 浏览器中显示 HTML,元素大小在 CSS 中指定

javascript - 表单提交未显示在 Firebase 中

javascript - Firebase.auth 示例不起作用

android - 如何在 fragment 中初始化 "lateinit binding"?

android - 不推荐使用 PictureListener 和 onNewPicture() - 替代方案?

android - 致命异常,android.content.res.Resources$NotFoundException :

firebase - 如何在 Firebase 中使用 Telegraf(电报)?

kotlin - 在 Android Compose 的 View 模型中使用 State<Boolean> 是一种好方法吗?

spring-boot - 如何配置Spring Boot(Kotlin)应用程序以将/重定向到/swagger-ui.html?