firebase 如何在Android中从Firestore读取嵌套自定义对象的Map

v64noz0r  于 2023-02-05  发布在  Android
关注(0)|答案(2)|浏览(104)

我有一个自定义类(类有一个构造函数和setters/getters)

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

这是我的Firestore快照x1c 0d1x
字段“0”和“1”是我的迭代器,这取决于创建了多少个元素。

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

我需要获取所有元素,为每个元素创建一个新对象Test (o1{field1..3} .. oN{field1..3}),并将所有对象存储在ArrayList<Test>中,但我不知道如何操作。

yrefmtwq

yrefmtwq1#

如果您需要从ABCD文档中获取每个字段(0、1等)并创建一个List<Test>,首先,请按如下方式定义您的Test类:

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

另一方面,如果你想把一个自定义对象数组Map到一个自定义对象列表中,那么请看下面的帖子:

6ojccjat

6ojccjat2#

要从Android中的Firestore读取嵌套自定义对象的Map,您可以按照以下步骤操作:
定义POJO(Plain Old Java Object)类来表示自定义对象。创建对Firestore集合或包含嵌套自定义对象Map的文档的引用。调用get()方法以将数据作为任务检索。在任务的OnSuccessListener中,从DocumentSnapshot中提取数据作为Map。迭代Map并从数据中创建POJO类的示例。以下是示例代码片段:
数据库= FirebaseFirestore.getInstance();文档引用docRef =数据库.集合(“集合名称”).文档(“文档名称”);docRef.get().addOnSuccessListener(新的OnSuccessListener

相关问题