我正在尝试将一些值写入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);
答案 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);