我有一个项目,我在其中从 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/