如何在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
相关产品推荐
相关产品推荐

