首页 > 解决方案 > 如何从 Firestore 集合中获取所有文档并将它们返回到数组列表中?

问题描述

我有一个静态方法可以获取集合中的所有文档。我无法创建要返回的这些文档的数组。我怎么能那样做?让我们将数组列表称为“allItems”。我的方法是将在 for 循环中创建的每个项目添加到 allItems 数组列表中,但是当我返回它并且 android studio 提示我将数组列表设为最终列表时,该列表为空。

public static ArrayList<Item> geAllFromFireStore() {

        FirebaseFirestore db = FirebaseFirestore.getInstance();
        ArrayList<Item> allItems = new ArrayList<>();

        db.collection("Items")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {

                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(TAG, document.getId() + " => " + document.getData());

                                String name = document.get("name") + "";
                                String categoryName = document.get("category") + "";

                                Item item = new Item(name, category);

                                // I would like to add these items to an array list and return that array list

                            }
                        } else {
                            Log.w(TAG, "Error getting documents.", task.getException());
                        }
                    }
                });

        return allItems;
    }

标签: androidfirebasegoogle-cloud-firestore

解决方案


我是用 Kotlin 编写的,所以请在您的代码中进行调整。

// Declare variable that use to collect DocumentSnapshot
private lateinit var list: MutableList<DocumentSnapshot>

// In addOnCompleteListener…
if(task.isSuccessful){
    lstMAP = mutableListOf<DocumentSnapshot>()
    lstMAP.clear()
    lstMAP.addAll(task.result!!.documents)
} else {
    Log.d("doc", "0 doc")
}

推荐阅读