如何从 Firestore 中读取使用 Kotlin 中的 hashMap 添加的文档?

Posted

技术标签:

【中文标题】如何从 Firestore 中读取使用 Kotlin 中的 hashMap 添加的文档?【英文标题】:How to read documents from Firestore that was added using hashMap in Kotlin? 【发布时间】:2021-12-29 03:46:23 【问题描述】:

我已经设法将hashMap 的数据添加到Firestore 中,如下所示,但是如果没有模型类,我很难从Firebase 读取所有文档。

        val itemRequest = hashMapOf(
        "item" to newItem,
        "item_detail" to itemDetails,
        "requested_by" to getCurrentUserID(),
        "timestamp" to FieldValue.serverTimestamp(),
    )
    mFireStore.collection("item_request")
            .document()
            .set(itemRequest)
            .addOnSuccessListener 
            fragment.successAddingItemRequest()
        
            .addOnFailureListener 

            

【问题讨论】:

然后创建一个模型类。这将易于维护且不易出错。 我一般都是用model class做的,为了减少model class的数量,我就想到了这样做。我不知道哪个在性能方面更好。 您用来向 Firestore 添加数据的代码对我来说真的很棒。您在代码中尝试过什么来读取数据?请编辑您的问题并将您的数据库结构添加为屏幕截图。 【参考方案1】:

您可以使用DocumentSnapshot.data 属性将DocumentSnapshot 转换为Map<String, Any>

在你的情况下,你可以使用:

firestore.collection(collectionId).document(documentId).get()
    .addOnSuccessListener  documentSnapshot -> 
        val data = documentSnapshot.data
        val item = data["item"]
        val itemDetails = data["item_detail"]
        ...
    

在这里,您必须将返回的 Any 映射值转换为相应的数据类型。

但更好的方法是创建一个模型类来存储数据并使用DocumentSnapshot.getObject 取回数据。

【讨论】:

以上是关于如何从 Firestore 中读取使用 Kotlin 中的 hashMap 添加的文档?的主要内容,如果未能解决你的问题,请参考以下文章

Firestore + 云功能:如何从另一个文档中读取

如何从 kotlin 中的 firestore 读取映射数据

如何从 firestore 读取其他用户(不是 user.uid)的数据

即使从缓存中获取数据,Firestore 数据库读取计数也会增加

如何从 Firebase Firestore 获取数据并将其存储在列表中以在颤振小部件中使用?

无法从 Firestore 集合中读取