【问题标题】:How to read map of nested custom objects from Firestore in Android如何从 Android 中的 Firestore 读取嵌套自定义对象的映射
【发布时间】:2023-02-04 19:56:02
【问题描述】:

我有一个自定义类(类有构造函数和设置器/获取器)

class Test() {
String field1;
String field2;
String field3;
}

这是我的 Firestore 快照

字段“0”和“1”是我的迭代器,具体取决于已创建的元素数量。 我使用这行代码来确定阅读多少次

for (int i = 0; i < documentSnapshot.getData().size(); i++)

我需要获取所有元素,为每个元素创建一个新对象测试 (o1{field1..3} .. oN{field1..3}) 并将所有对象存储在 ArrayList&lt;Test&gt; 中,但我无法弄清楚如何。

【问题讨论】:

  • 除了我的回答,我认为这个resource 会有所帮助。

标签: java android firebase google-cloud-firestore


【解决方案1】:

如果您需要从 ABCD 文档中获取每个字段(0、1 等)并创建一个List&lt;Test&gt;,首先,请像这样定义您的测试类:

class Test {
    String field2, field1, field3;

    public Test(String field1, String field2, String field3) {
        this.field1 = field1;
        this.field2 = field2;
        this.field3 = field3;
    }
}

紧接着,请使用以下代码行:

FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("collname").document("ABCD");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document != null) {
                List<Test> testList = new ArrayList<>();
                Map<String, Object> data = document.getData();
                data.values().forEach( h -> {
                            Map<String, String> map = (Map<String, String>) h;
                            testList.add(new Test(map.get("field1"), map.get("field2"), map.get("field3")));
                        }
                );
                Log.d(TAG, "size: " + testList.size());
            } else {
                Log.d("TAG", "User doesn't exist.");
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

根据您的屏幕截图,logcat 中的结果将是:

2

另一方面,如果您想将自定义对象数组映射到自定义对象列表中,请参阅我在以下帖子中的回答:

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2012-12-02
    • 2018-10-31
    • 2016-05-26
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多