有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

For循环中的java 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结束。然后开始查询,而不是执行查询,然后在查询完成后执行i++操作。我尝试过将I++放在不同的位置,但没有成功

我怎样才能让它使用数组中的第一个项执行第一次查询,完成数据检索,然后使用I++执行下一次查询

多谢各位


共 (1) 个答案

  1. # 1 楼答案

    你考虑使用^{} operator吗?如果您有10个或更少的日期,则不需要循环,您的查询将类似于:

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