Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase数据库值不断更改,而不是添加自身_Java_Firebase_Loops_Firebase Realtime Database - Fatal编程技术网

Java Firebase数据库值不断更改,而不是添加自身

Java Firebase数据库值不断更改,而不是添加自身,java,firebase,loops,firebase-realtime-database,Java,Firebase,Loops,Firebase Realtime Database,我想做的是首先检查Firebase数据库中是否有值,如果没有,则添加它 我的数据库如下所示: appnickname { Strings { key : value key : value key : value 我现在的代码是: reference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(Da

我想做的是首先检查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) {
        }
    });

我当前代码的问题是,它只是更改同一个键下存在的字符串,而不是添加新的键/值组合。好的是,如果它是相同的值,就我所能看到的而言,什么都不会发生。我如何修复这个坏东西?

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

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

    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”,如果是,则执行所需操作。如果不是,则添加另一个键。

似乎正在发生的是,您正在使用key:value结构,每次都将新值发送到同一个键,这也是为什么当您输入If nothing(如果没有发生)时

我会说给每个人一个不同的钥匙,但是如果你对每个人都使用相同的钥匙,为什么还要使用钥匙呢?只要让父母给你起个名字,把你所有的价值都放进去

appnickname {
  Strings {
    people {
      value
      value
      value

如果“Strings”没有更多的子项,并且您的密钥在整个过程中只会是people,而不只是称其为people并跳过另一个不需要的父项。

您的数据库是否包含相同的节点名?我的意思是所有的名字都是“key”?不完全是“key”,但是对于我的应用程序来说,密钥的名字是什么并不重要,只是值。我想把它改成原来的样子?我的数据库不是那样的。以你为例,希望它应该是这样的:People{person:Peter,person:Michael,person:Jacob…..最好不要用同样的“钥匙”,在检索值时更容易。现在我明白了,我不能对多个值使用同一个键。我应该如何只检查值并在中添加新的键/值对?这与我在回答中所做的相同,您可以将datasnapshot放在父节点上,然后使用
orderByChild.equalTo
进行查询。然后使用
exists()
它将检查键/值对是否存在,您可以添加另一个键/值对。我尝试使用您的代码,但它不起作用。我想,因为您可能认为我要比较的键/值对位于不同的子项中。它们位于同一个子项中。因此,当我比较它们并发现不存在相等项时,它会简单地替换e具有相同键和不同值的键。