我正在尝试将一些值写入 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);
最佳答案
在您共享的代码中,您调用了DatabaseReference.push()
。每次调用 push
时,Firebase 都会为新的唯一位置生成一个 key 。因此,如果您随后对该新引用调用 setValue
,您将编写一个全新的值。
setValue
方法始终将 DatabaseReference
中的任何内容替换为您提供的值。但由于新位置没有任何值(value),因此您只是编写一个全新的用户。
如果您想要更新现有节点而不替换现有值,则必须在较低节点上调用setValue()
,或者调用updateChildren ()
.
例如,要更新 /Users/$userId/username
下的 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);
关于java - Set.value 用新数据替换现有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060676/