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

如何从Firestore文档中获取自定义对象的ArrayList?[副本]

蒯慈
2023-03-14

我试图创建一个从Firestore数据创建的对象的ArrayList。据我所知,这些对象正在正确地创建。当我试图访问我要添加它们的ArrayList时,尽管它是空的。我获取集合的引用,然后为查询添加侦听器。

ArrayList<Doctor> docList = new ArrayList<> (); 
CollectionReference doctors = db.collection("doctors");
doctors.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {

                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        docList.add(document.toObject(Doctor.class);
                    }
                }
            }
        });

共有1个答案

鱼旺
2023-03-14

Firebase API是异步的。这意味着不能保证您的ArrayList在以后访问时会被填充。

为了解决这个问题,您可以创建一个单独的方法,在其中使用填充的ArrayList。您将从oncompleteListener调用此方法,因为您知道它已经在侦听器中填充。

doctors.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) { 
                if (task.isSuccessful()) {
                    ArrayList<Doctor> docList = new ArrayList<> ();
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        docList.add(document.toObject(Doctor.class);
                    }
                    doSomethingWithArray(docList);
                }
            }
        });

// ... rest of your code ...


// the new method to process the received arraylist
public void doSomethingWithArray(ArrayList<Doctor> docList) {
    // do whatever you need to do with the array list
}
 类似资料:
  • 我想获得firestore集合中的文档总数,我正在制作一个论坛应用程序,所以我想显示每个讨论中的当前评论量。有之类的东西吗?

  • 我很难从自定义对象的ArrayList中删除重复项。 删除重复项 自定义对象等于() 删除重复项后的输出 关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。

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

  • 我写了一个程序,创建了3个.txt格式的文件,并将一些数据写入其中。现在我被要求为这些文件定义一个value对象,并重写toString方法,然后当我读取这些文件时,将它们设置为value对象。现在我完全糊涂了,不知道从何说起。事先谢谢你的帮助

  • 在React/FireStore应用程序上工作,尝试将Id-s放回objects数组中。代码如下: 知道'_zipobject'行有什么问题吗?

  • 我目前正在对firestore中的文档字段进行手动访问,并将它们放入一个对象中,我将该对象定义为JSON。 有没有一种方法可以使这个过程自动化?类似于: