Android中如何从Firestore读取嵌套自定义对象的Map
解决方案
首先修正你的Test类(补充必要的构造方法和规范字段定义,Firestore序列化依赖无参构造):
class Test { private String field1; private String field2; private String field3; // 无参构造(必须,Firestore反序列化需要) public Test() {} // 带参构造(可选,方便手动创建对象) public Test(String field1, String field2, String field3) { this.field1 = field1; this.field2 = field2; this.field3 = field3; } // Getter & Setter 方法 public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } }
接下来实现从Firestore快照转换为ArrayList<Test>的逻辑:
// 初始化存储Test对象的列表 ArrayList<Test> testList = new ArrayList<>(); Map<String, Object> snapshotData = documentSnapshot.getData(); if (snapshotData != null) { // 按数字标识遍历所有嵌套元素 for (int i = 0; i < snapshotData.size(); i++) { String elementKey = String.valueOf(i); // 直接将对应键的嵌套数据转换为Test对象 Test testObj = documentSnapshot.get(elementKey, Test.class); if (testObj != null) { testList.add(testObj); } } }
关键说明
- Firestore的
get(String field, Class<T> valueType)方法会自动完成嵌套数据到自定义对象的映射,要求类的字段名与Firestore中的字段名完全匹配(大小写敏感),且必须提供无参构造方法。 - 遍历过程通过
String.valueOf(i)生成快照中的数字键("0""1"等),匹配对应嵌套元素。 - 加入非空判断,避免空对象被加入列表引发后续问题。
内容的提问来源于stack exchange,提问作者Nemanja
相关产品推荐
相关产品推荐

