【问题标题】: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<Test> 中,但我无法弄清楚如何。
【问题讨论】:
标签:
java
android
firebase
google-cloud-firestore
【解决方案1】:
如果您需要从 ABCD 文档中获取每个字段(0、1 等)并创建一个List<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
另一方面,如果您想将自定义对象数组映射到自定义对象列表中,请参阅我在以下帖子中的回答: