Java,Firestore-在android studio中使用文档ID的arraylist从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:

我有一个ArrayList,其中包含我要获取的所有ID。是否有一种方法可以使用列表获取多个文档及其字段值。另外,如果我必须手动创建for循环来获取每个文档,我应该如何做

Firestore数据结构:

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());
        }
    }
});