android - 如何进行多个查询并加载到数组中?
问题描述
如何将多个 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
}
解决方案
当您调用planQuery.get()
它时,它会返回一个Task<QuerySnapshot>
. 要等待多个任务完成,请收集所有这些任务并将它们传递给Tasks.whenAll
.
有关这方面的更多信息,我建议阅读成为 Firebase 任务大师。
推荐阅读
- c - 分配二维数组(类型 char)为浮点计算准备内存
- reactjs - 停止 React Google 自动完成组件重新渲染,但在选择时渲染其他所有内容
- sql - Hive 窗口功能:将组 id 分配给重叠组
- .net-core - 如何使用 Steeltoe Actuator + opencensus + Prometheus 使用指标
- css - 如何仅使用一个元素 - div 制作图片?
- vue.js - 显示存储在我的后端服务器上的图像
- amazon-web-services - 如何跨账户访问 Lambda 函数?
- windows - 关闭日志记录窗口
- javascript - 如何在 html 中显示 res.write()
- firebase - 如何使用 express 框架在同一个 firebase 项目托管下托管多个站点