当前位置:  开发笔记 > Android > 正文

Android Firebase仅更新某些字段

如何解决《AndroidFirebase仅更新某些字段》经验,为你挑选了2个好方法。

我正在开发一个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 toMap() {
        HashMap 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 postValues = user.toMap();

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

        myRef.updateChildren(childUpdates);

    }
}

当我打电话时myRef.updateChildren(childUpdates);,所有旧数据都会更新,我的新孩子(我在应用程序中创建的)会丢失.

在此输入图像描述



1> cartant..:

您正在执行更新的引用是针对路径FB_REFERENCE_USER- 它似乎是包含用户的路径.

updateChildren仅更新直接子项,其中的值将被替换.因此,更新正在为用户替换整个子节点,并且不会触及其他用户的子节点.这是预期的行为.

您需要使用针对该特定用户的ref执行更新 - 以便保持未更新的该用户的属性不受影响.

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

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

的行为updateChildren被描述这里的文档.



2> Aldi Renaldi..:

如果您只想更新某些字段,请尝试使用

myRef.child(userID).child("which field do you want to update").setValue(ValueVariable);

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有