有 Java 编程相关的问题?

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

java如何从安卓查询Firebase中是否存在值数组?

我有一个日期的静态数组-String[] dates = new String[MAX_DAYS]

每个日期的格式为yyyyMMdd,数组按字母顺序排序

(例如dates[0] = "20200102"dates[1] = "20200101"dates[2] = "20191231"dates[3] = "20191230"等等)

我还有一个数据库(我使用Firebase数据库)存储日期(以上述格式),如下所示:

{   
  "key" : {
    "aaa" : "20191230",
    "bbb" : "20191231",
    "ccc" : "20191231",
    "ddd" : "20191231",
    "eee" : "20200101",
    "fff" : "20200101",
    "ggg" : "20200103"
    }
}

我想检查dates数组中的每个值(减去第一个索引),如果该值在数据库中至少出现一次。(即,如果数据库中存在dates的所有值,但第一个值除外,则执行其他操作)

我创建了一个查询,该查询只获取key下值介于dates[1]dates[dates.length - 1]之间的子项:

// reference to "key" node
ref.orderByValue().startAt(dates[dates.length - 1]).endAt(dates[1])
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for(DataSnapshot ds : dataSnapshot.getChildren()) {

                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {}
                });

找出数据库中是否存在dates的所有值的最有效方法是什么?我是否只是将每个子级的值存储在另一个数组中,然后循环两个数组?还是有更好的办法


共 (1) 个答案

  1. # 1 楼答案

    像这样的方法应该会奏效:

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      List<String> dbDates = new List<>();
      for(DataSnapshot ds : dataSnapshot.getChildren()) {
        dbDates.add(ds.getValue(String.class);
      }
      for (int i=0; i < dates.length; i++) {
        if (dbDates.contains(dates[i])) {
          System.out.println("Database contains "+dates[i]);
        }
        else {
          System.out.println("Database does not contain "+dates[i]);
        }
      }
    }
    

    因此,这首先将快照从数据库转换为列表,然后在您描述的数组上循环,以检查数据库中是否存在每个快照