Android Firebase обновляет только некоторые поля

Я разрабатываю приложение для 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); , Все мои старые данные обновляются, и мои новые дети (которые я создал во время приложения) теряются.

Введите описание изображения здесь

Ссылка, с которой выполняется обновление, относится к пути FB_REFERENCE_USER – который является путём, который содержит пользователей.

updateChildren обновляет только непосредственные дочерние updateChildren , при этом значения updateChildren . Таким образом, обновление заменяет весь дочерний элемент для пользователя и оставляет детей для других пользователей нетронутыми. Это ожидаемое поведение.

Вам необходимо выполнить обновление, используя ссылку ref для этого конкретного пользователя, так что свойства этого пользователя, которые не обновляются, остаются нетронутыми.

То есть вам нужно сделать что-то вроде этого:

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

Поведение updateChildren описано здесь в документации.

Если вы хотите обновить только некоторое поле, попробуйте использовать

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