Firebase数据库值不断变化,而不是自行添加

时间:2019-01-22 06:49:37

标签: java firebase loops firebase-realtime-database

我要做的是首先检查Firebase数据库中是否有一个值,如果没有,则将其添加。

我的数据库如下:

appnickname {
Strings {
    key : value
    key : value
    key : value

我当前的代码是这样:

reference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot n : dataSnapshot.getChildren()) {
                if (n.getValue().equals(string)) {
                    break;
                }

                reference.child("key").setValue(string);
            }
        }

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

我当前代码的问题是它只是更改了同一键下存在的字符串,而不是添加新的键/值组合。好消息是,如果它具有相同的值,那么据我所知,什么也不会发生。我该如何解决坏事?

2 个答案:

答案 0 :(得分:1)

假设您的数据库是这样的:

    name  : Peter
    age   : 100
    height: 500

然后您可以执行以下操作:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
reference.orderByChild("name").equalTo("Peter").addListenerForSingleValueEvent(new ValueEventListener() {

  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
          if(dataSnapshot.exists()){
              //do something
          }
          else
          {
              reference.child("familyName").setValue(familyName);
          }
        }
  }

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

这将检查数据库中是否存在名称等于“ Peter”的名称,如果名称为“ Peter”,则执行所需的任何操作。如果不是,则添加另一个密钥。

答案 1 :(得分:0)

似乎正在发生的事情是您正在使用key:value结构并将每次新值发送到相同的key,这也是为什么如果什么也没有输入的原因。

我会说给每个人一个不同的钥匙,但是如果您对所有人使用相同的钥匙,为什么还要使用钥匙?只需让一个名为people的父母,然后将所有价值观都放在其中即可。

appnickname {
  Strings {
    people {
      value
      value
      value

如果“字符串”没有更多的孩子,并且您的密钥在整个过程中只会是别人,而不是仅仅称呼别人并跳过另一个不需要的父母。