gpt4 book ai didi

java - For 循环内的 Firestore 查询

转载 作者:行者123 更新时间:2023-12-01 17:53:06 25 4
gpt4 key购买 nike

我正在尝试从 Firestore 检索数据,其中“simpleDate”字段等于字符串(日期)数组。

所以ArrayList<String> uniqueDates = new ArrayList<String>();包含多个字符串:

[19/03/2020, 18/03/2020, 14/03/2020] ....

我想迭代每个查询,获取该唯一字符串的数据,然后返回到开头并使用下一个字符串创建一个新查询。但是,我无法让它等到完成并检索数据,然后再进入下一次迭代。这是我到目前为止所拥有的:

 public void GetDailyCal() {
for (int i = 0; i < uniqueDates.size(); i++) {
sum = 0;
fdb.collection("users").document(username).collection("Diet").whereEqualTo("simpleDate", uniqueDates.get(i))
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot snapshot : task.getResult()) {
List<Long> TotalCalories = new ArrayList<>();
TotalCalories.add(snapshot.getLong("foodCalories"));
for (int i = 0; i < TotalCalories.size(); i++) {
sum += TotalCalories.get(i);
}
}

}

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

});
//finalCalories.add(Long.valueOf(sum));
//i++;
}
}

目前,这只是迭代 i++ 直到到达 uniqueDates.size() 的末尾,然后开始查询,而不是执行查询,然后在完成后执行 i++。我尝试过将 i++ 放在不同的位置,但没有成功。

我到底如何才能使用数组中的第一项执行第一个查询,完成数据检索,然后 i++ 执行下一个查询?

谢谢。

最佳答案

您是否考虑过使用 in operator ?如果您有 10 个或更少的日期,则不需要循环,您的查询将类似于:

fdb.collection("users").document(username)
.collection("Diet").whereIn("simpleDate", uniqueDates)

关于java - For 循环内的 Firestore 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60762279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com