Java Firebase数据库值不断更改,而不是添加自身
我想做的是首先检查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
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具有相同键和不同值的键。