当前位置: 首页 > 知识库问答 >
问题:

Java,FiRest-使用android工作室中的文档ID数组列表,从fiRest获取多个文档

乜璞瑜
2023-03-14

我有一个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.add(user细节)给出了空指针异常;

 for (String doc : list_of_Friends) {
                    FirebaseFirestore.getInstance().collection("Users").document(doc).get()
                            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                @Override
                                public void onSuccess(DocumentSnapshot documentSnapshot) {
                                    FamilyMember userDetails = documentSnapshot.toObject(FamilyMember.class);
                                    FriendsData.add(userDetails);
                                }
                            });

编辑2:

循环的另一个逻辑也给出了相同的错误。当我登录时,我可以看到doc

FirebaseFirestore.getInstance().collection("Users").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if(task.isSuccessful())
                            for (DocumentSnapshot ds : task.getResult()){
                                for (String doc : list_of_Friends) {
                                    if(ds.getId().equals(doc)){
                                        FriendsData.add(ds.toObject(FamilyMember.class));
                                    }
                                }

                            }
                        }
                    });

共有1个答案

沙富
2023-03-14

当您调用. get()在Document引用对象上时,您会得到一个任务

是否有一种方法可以使用列表获取多个文档及其字段值。

是的。解决这个问题的关键是whenAllSuccess(收集

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,那么日志猫中的结果将是所有家庭成员的所有名称。

 类似资料:
  • 我的firestore数据库中有两个集合,第一个是所有文档的列表(区块列表),第二个是用户的集合。当用户在应用程序上为帖子添加书签时,只将此帖子的id发送到子收藏(收藏夹)。 那么,如何根据第一个集合的ID显示该子集合的文档呢。 我使用此代码访问子集合ID列表,但我想知道如何使用它从主集合(区块列表)中获取适合此ID的文档。

  • 问题内容: 我的Firestore数据库结构: 现在我想从中获取文件清单。将有一个包含以下数据的列表。我需要它是因为我想制作一个微调器并将这些数据放入微调器中。然后,用户将选择一些文档并下载。 我尝试使用下面的代码: 但是代码只有在我拥有没有文档集合的数据结构时才起作用。在其他情况下,中没有任何文档。 谢谢! 问题答案: 要在中包含所有文档名称的列表,请使用以下代码: 您的logcat中的结果将是

  • 我试图从跨多个工作表的考勤中找到员工ID,并将时间戳拉到单个工作表中。 我在Excel中做过类似的事情,我猜可以在谷歌表格中使用谷歌应用脚本完成。 如果有人能引导我使用谷歌表单中的内置或自定义功能,那将非常有帮助。

  • 问题内容: 我在文档文件夹中获取文件名的代码有什么问题? 我以为我已正确阅读了文档,并且我对documents文件夹中的内容非常确定,但是“ fileList”没有显示任何内容?“目录”显示文件夹的路径。 问题答案: 此解决方案适用于 Swift 4 (Xcode 9.2)和 Swift 5 (Xcode 10.2.1+): 这是一个可重用的FileManager扩展,它还允许您跳过或在结果中包含

  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?

  • 问题内容: 从最近6小时开始搜寻,但没有任何解决方法。请帮我。Elasticsearch ID为:2、4、7、8、11、15、15、16,.... 我的当前文档ID为11,然后如何获取下一个ID为15,上一个ID为8。 谢谢 问题答案: 您可以运行两个查询,一个查询下一个ID,一个查询前一个ID。 下一个ID的查询是: 而先前ID的查询为: