java - For 循环内的 Firestore 查询

标签 java android firebase google-cloud-firestore

我正在尝试从 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/

相关文章:

java - 在比较器接口(interface)中使用 equals() 方法?

java - 如何在使用 Glide 加载之前解密图像

java - 缩写长对象链(java)

java - 不知道为什么我收到这个 NullPointerException 这个位置应该有数据

java - 无法在 ubuntu 上启动 adt-bundle 来运行程序

android - cocos2d-android(github版) 如何在移动背景层的同时让一个 'player'的 Sprite 居中?

android - 统一远程 5 不工作

android - 是否可以在没有 FCM 的情况下使用可编程聊天 SDK?

IOS Web 浏览器上的 Firebase 消息传递

ios - Firebase 存储删除 uidd 图像