我要做的是首先检查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) {
}
});
我当前代码的问题是它只是更改了同一键下存在的字符串,而不是添加新的键/值组合。好消息是,如果它具有相同的值,那么据我所知,什么也不会发生。我该如何解决坏事?
答案 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
如果“字符串”没有更多的孩子,并且您的密钥在整个过程中只会是别人,而不是仅仅称呼别人并跳过另一个不需要的父母。