Java,Firestore-在android studio中使用文档ID的arraylist从Firestore获取多个文档
我有一个ArrayList,其中包含我要获取的所有ID。是否有一种方法可以使用列表获取多个文档及其字段值。另外,如果我必须手动创建for循环来获取每个文档,我应该如何做 Firestore数据结构:Java,Firestore-在android studio中使用文档ID的arraylist从Firestore获取多个文档,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有一个ArrayList,其中包含我要获取的所有ID。是否有一种方法可以使用列表获取多个文档及其字段值。另外,如果我必须手动创建for循环来获取每个文档,我应该如何做 Firestore数据结构: Users: user1: field1 : field2 : field3 : field4 : user2: field1 : field2 : field3 : field4 : user3:
Users:
user1:
field1 :
field2 :
field3 :
field4 :
user2:
field1 :
field2 :
field3 :
field4 :
user3:
field1 :
field2 :
field3 :
field4 :
该列表包含:user1、user2、user3等等
编辑1:
我试图使用for循环获取它,但它给出了一个空指针异常
在FriendsData.adduserDetails
当您调用.get on DocumentReference对象时,您将返回一个任务对象
是否有一种方法可以使用列表获取多个文档及其字段值
是的。解决这个问题的关键是方法。在您的特定情况下,代码应如下所示:
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (String doc : list_of_Friends) {
tasks.add(FirebaseFirestore.getInstance().collection("Users").document(doc).get());
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
FamilyMember fm = ((DocumentSnapshot) object).toObject(FamilyMember.class);
Log.d("TAG", fm.getName());
}
}
});
假设FamilyMember类中有一个名为name的属性和一个名为getName的getter,则logcat中的结果将是所有家庭成员的所有名称。当您调用时。使用DocumentReference对象,您将返回一个任务对象
是否有一种方法可以使用列表获取多个文档及其字段值
是的。解决这个问题的关键是方法。在您的特定情况下,代码应如下所示:
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (String doc : list_of_Friends) {
tasks.add(FirebaseFirestore.getInstance().collection("Users").document(doc).get());
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
FamilyMember fm = ((DocumentSnapshot) object).toObject(FamilyMember.class);
Log.d("TAG", fm.getName());
}
}
});
假设FamilyMember类中有一个名为name的属性和一个名为getName的getter,则logcat中的结果将是所有家族成员的所有名称。您尝试了哪些方法来检索文档?我尝试使用for循环逐个添加每个文档,但是它给出了空指针,除了所有文档都有相似的属性/字段吗?是的,它们有相同数量的字段。我已经更新了我对循环所做的更改。请检查您尝试了哪些方法来检索文档?我尝试使用for循环逐个添加每个文档,但它会给出空指针,除非所有文档都具有类似的属性/字段?是的,它们的字段数相等。我已更新了对循环所做的更改。请检查一下,我没想到会得到你的答复。非常高兴。你的回答也帮了我很大的忙。我没想到会得到你的回答。非常高兴。你的回答也帮了我很多忙。
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (String doc : list_of_Friends) {
tasks.add(FirebaseFirestore.getInstance().collection("Users").document(doc).get());
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
FamilyMember fm = ((DocumentSnapshot) object).toObject(FamilyMember.class);
Log.d("TAG", fm.getName());
}
}
});