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

标签 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);

最佳答案

在您共享的代码中,您调用了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/

相关文章:

java - Android 表单验证

firebase - 使用 map 的 Flutter Firestore where 子句

ios - 从 ios 中的 firebase 上的特定文件夹下载所有图像

java - 为什么 finish() 不立即退出处理?

android - 创建 iPhone 风格的标签

android - Executor 的 Runnable 中的变量

iOS 相册权限 nativescript

java - 应用程序如何测量 CPU 使用率(以百分比表示)?

java - 尝试从 TextView 获取值并将其发送到 firebase 引用,但应用程序崩溃了

java - 如何解决这个 java.lang.ClassCastException : org. apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource?