首页 > 解决方案 > 如何进行多个查询并加载到数组中?

问题描述

如何将多个 Firestore 查询结果加载到同一个数组中?我正在使用 for 循环,但由于 Firestore 查询是异步的,因此数组设置为 0。这是我的代码:

private void loadMealplans() {
        for (int i = 0; i < restaurantArrayList.size(); i++) {
            Query planQuery = firebaseFirestore.collection("Meal_Plans").whereEqualTo("restaurantId", restaurantArrayList.get(i).getRestaurantId());
            planQuery.get().addOnSuccessListener(queryDocumentSnapshots -> {
                for (QueryDocumentSnapshot allPlans : queryDocumentSnapshots) {
                    Mealplan mealplan = allPlans.toObject(Mealplan.class);
                    mealplan.setMealplanId(allPlans.getId());
                    myPlans.add(mealplan);
                }
            });
            Log.d(TAG, "mealplan size:"+ myPlans.size()); // this is always zero
        }
        // Loading data into recycler view
    }

标签: androidgoogle-cloud-firestore

解决方案


当您调用planQuery.get()它时,它会返回一个Task<QuerySnapshot>. 要等待多个任务完成,请收集所有这些任务并将它们传递给Tasks.whenAll.

有关这方面的更多信息,我建议阅读成为 Firebase 任务大师


推荐阅读