rod*_*igo 11 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的更新代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时myRef.updateChildren(childUpdates);
,所有旧数据都会更新,我的新孩子(我在应用程序中创建的)会丢失.
car*_*ant 11
您正在执行更新的引用是针对路径FB_REFERENCE_USER
- 它似乎是包含用户的路径.
updateChildren
仅更新直接子项,其中的值将被替换.因此,更新正在为用户替换整个子节点,并且不会触及其他用户的子节点.这是预期的行为.
您需要使用针对该特定用户的ref执行更新 - 以便保持未更新的该用户的属性不受影响.
也就是说,你需要做这样的事情:
User user = new User(userID, userName, userMail, userActive);
Map<String, Object> postValues = user.toMap();
myRef.child(userID).updateChildren(postValues);
Run Code Online (Sandbox Code Playgroud)
的行为updateChildren
被描述这里的文档.
如果您只想更新某些字段,请尝试使用
myRef.child(userID).child("which field do you want to update").setValue(ValueVariable);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9582 次 |
最近记录: |