我正在使用Kotlin开发一个Android应用程序,我试图从Firestore获取文档参考

wgx48brx  于 2023-08-06  发布在  Kotlin
关注(0)|答案(2)|浏览(94)

我正在使用Kotlin和Firebase开发一个Android原生应用程序,我有一个名为Topic的集合和2个类型引用字段,一个用于User,另一个用于Category,我试图通过引用文档获取所有文档,但似乎不起作用:

db.collection("topic").get().addOnSuccessListener { result ->
        for (document in result) {
            Log.e("success", "${document.id} => ${document.data.get("subject")}")
            var topic: Topic = Topic(
                document.id as String,
                document.data.get("subject") as String,
                document.data.get("content") as String,
                document.data.get("created_at") as String,
                document.getDocumentReference("Category") as Category,
                document.getDocumentReference("User") as User
            )}

字符串
没有错误,但在我的打印(主题)中也没有结果。
这是主题类

class Topic : Serializable {
    var id : String = ""
    var subject : String = ""
    var content : String = ""
    var created_at : String = ""
    var cat = Category()
    var user = User()

    constructor(){}

    constructor(
        id: String,
        subject: String,
        content: String,
        created_at: String,
        cat: Category,
        user: User
    ) {
        this.id = id
        this.subject = subject
        this.content = content
        this.created_at = created_at
        this.cat = cat
        this.user = user
    }

    override fun toString(): String {
        return "Topic(id='$id', subject='$subject', content='$content', created_at='$created_at', cat=$cat, user=$user)"
    }
}


的数据

c0vxltue

c0vxltue1#

您必须通过单独的get()调用显式地获取每个引用的文档。没有办法在您当前的呼叫中自动获取它们。
所以类似于:

db.collection("topic").get().addOnSuccessListener { result ->
    for (document in result) {
        document.getDocumentReference("Category").get().addOnSuccessListener { categoryDoc ->
            let category = categoryDoc.data as Category
            ...
        }
    }
}

字符串
另见:

fjaof16o

fjaof16o2#

当您使用以下代码行时:

document.getDocumentReference("Category") as Category

字符串
您将获得一个DocumentReference类型的对象,而不是Category类型的对象,因为DocumentSnapshot的getDocumentReference()方法返回该类型的对象。请记住,在Kotlin中,您无法将DocumentReference类型的对象转换为Category,因此才会出现这种行为。
因此,简单地获取对象的引用将返回对象本身的假设是正确的。你可以解决这个问题的唯一方法是为每个人单独打电话,正如@FrankvanPuffelen在他的回答中提到的那样。
作为一个单独的主题,你也可以从下面的帖子中看看我的答案,因为我看到你在文档中使用了不同的属性命名:

相关问题