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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:55:30