Set.value用新数据替换现有数据

时间:2019-05-09 13:35:40

标签: java android firebase

我正在尝试将一些值写入Firebase数据库,但是当写入新值时,旧值会被删除吗?

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("Messages");
        DatabaseReference userref= FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
        userref.setValue(Username);
        DatabaseReference keyReference = databaseReference.push();
        User user=new User("Mine message is here","Sender");
       keyReference.setValue(user);

1 个答案:

答案 0 :(得分:0)

在您共享的代码中,您叫DatabaseReference.push()。每次调用push时,Firebase都会为新的唯一位置生成一个密钥。因此,如果您随后在该新引用上调用setValue,那么您正在写一个全新的价值。


setValue方法始终用您提供的值替换DatabaseReference中的任何内容。但是,由于在新位置没有任何价值,因此您只是在编写一个全新的用户。

如果要更新而不替换现有值的现有节点,则必须在较低节点上调用setValue(),或调用updateChildren()

例如,要更新username下的/Users/$userId/username属性,您可以执行以下操作:

userref.child("username").setValue("New username");

这将使/Users/$userId下的任何其他子节点保持不变。

如果要更新/Users/$userId下的多个子级,则可以多次调用setValue

userref.child("username").setValue("New username");
userref.child("location").setValue("San Francisco");

或者您可以将值放入Map并将其传递到updateChildren

Map<String,Object> values = new HashMap<>();
values.put("username", "New username");
values.put("location", "San Francisco");
userref.updateChildren(values);