You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中读取Firestore中通过HashMap添加的文档

无模型类读取Firestore集合全量文档实现方案

你写入时用HashMap结构存储数据,读取时不需要额外定义模型类,直接将文档快照的原始数据转为HashMap后按键取值即可,完整实现代码如下:

mFireStore.collection("item_request")
    .get()
    .addOnSuccessListener { querySnapshot ->
        // 遍历集合下所有返回的文档
        for (documentSnapshot in querySnapshot.documents) {
            // 直接将文档数据转为HashMap,和写入时的结构完全匹配
            val requestMap = documentSnapshot.data as? HashMap<String, Any?> ?: continue
            
            // 按照写入时定义的键名直接读取对应值,类型和写入时保持一致即可
            val item = requestMap["item"] as? String // 此处类型请根据你实际的newItem变量类型调整
            val itemDetail = requestMap["item_detail"] as? String // 此处类型请根据你实际的itemDetails变量类型调整
            val requestedBy = requestMap["requested_by"] as? String
            val timestamp = requestMap["timestamp"] as? com.google.firebase.Timestamp
            
            // 拿到字段后可直接用于UI渲染、逻辑处理等操作
            // 示例:打印时间戳对应的本地时间
            timestamp?.let {
                Log.d("Firestore读取", "请求时间:${it.toDate().toLocaleString()}")
            }
        }
        // 全量文档读取完成后可执行后续回调逻辑
        fragment.loadAllRequestSuccess()
    }
    .addOnFailureListener { e ->
        // 读取失败处理逻辑,可按需添加用户提示、错误日志上报等
        Log.e("Firestore读取", "读取请求列表失败", e)
    }

注意事项

  • 取值时的类型需要和你写入对应字段的类型完全匹配,避免出现类型转换异常
  • 写入时用FieldValue.serverTimestamp()生成的时间字段,读取时会转为Firebase官方的Timestamp类型,调用toDate()方法即可转为Java标准Date对象做后续处理
  • 如果你需要监听集合的实时数据变化,仅需把get()方法替换为addSnapshotListener(),内部数据处理逻辑无需修改
  • 需要加查询条件时,可在get()之前链式调用whereEqualTo/orderBy等查询方法,不影响后续的数据解析逻辑

内容的提问来源于stack exchange,提问作者Codist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:24:04