Android Firebase 只更新部分字段

标签 android firebase firebase-realtime-database

我正在开发一个 Android 应用程序,每次当用户启动这个应用程序时,它都会从这个用户那里生成一个新的注册(如果不存在),更新现有数据,我的应用程序会在用户节点。

每次我更新这个节点时,所有其他信息都会丢失。

我的用户类

@IgnoreExtraProperties
public class User {

public String userID;
public String userName;
public String userMail;
public boolean active;

    public User() {}

    public User(String userID, String userName) {
        this.userID = userID;
        this.userName = userName;
    }

    public User(String userID, String userName, String userMail, boolean active) {
        this.userID = userID;
        this.userName = userName;
        this.userMail = userMail;
        this.active = active;

    }

    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("user_id", userID);
        result.put("name", userName);
        result.put("email", userMail);
        result.put("active", active);

        return result;
   }

}

还有我的更新代码:

public class FireBaseUser {
    public static String FB_REFERENCE_USER = "user";

    public void updateUser(String userID, String userName, String userMail, boolean userActive) {
        // Write a message to the database
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference(FB_REFERENCE_USER);


        User user = new User(userID, userName, userMail, userActive);
        Map<String, Object> postValues = user.toMap();

        Map<String, Object> childUpdates = new HashMap<>();
        childUpdates.put(userID, postValues);

        myRef.updateChildren(childUpdates);

    }
}

当我调用 myRef.updateChildren(childUpdates); 时,我所有的旧数据都会更新,而我的新子数据(我在应用程序期间创建的数据)会丢失。

enter image description here

最佳答案

您执行更新所用的引用是针对路径 FB_REFERENCE_USER - 这似乎是包含用户的路径。

updateChildren 仅更新直接子项,并替换这些子项下的值。所以更新正在为用户替换整个 child ,并让其他用户的 child 保持不变。这是预期的行为。

您需要使用该特定用户的 ref 执行更新 - 以便该用户未更新的属性保持不变。

也就是说,你需要做这样的事情:

User user = new User(userID, userName, userMail, userActive);
Map<String, Object> postValues = user.toMap();
myRef.child(userID).updateChildren(postValues);

描述了 updateChildren 的行为 here在文档中。

关于Android Firebase 只更新部分字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41688271/

相关文章:

java - 在 FragmentPagerAdapter 中动态添加删除 fragment 会导致 null 异常

android - 可以以编程方式设置 BroadcastReceiver 优先级吗?

Android 如何使用 facebook 3.0 sdk 点赞帖子

javascript - 监听子列表的变化

java - 错误 : incompatible types: android. content.Context 无法转换为 com.google.firebase.database.core.Context

swift - 如何使用 Firebase 更新 WhatsApp 等好友图像

android - 报警服务不工作

swift - 无法将任何对象转换为字符串

android - 如何将 Firebase 消息发送到项目中的特定应用程序?

swift - 从 Firebase 同步读取