В коде, которым вы поделились, вы звоните DatabaseReference.push()
. Каждый раз, когда вы звоните push
, Firebase генерирует ключ для нового уникального местоположения. Поэтому, если вы затем позвоните setValue
по этой новой ссылке, вы напишите совершенно новое значение.
Метод setValue
всегда заменяет все, что находится в DatabaseReference
, на указанное вами значение. Но поскольку в новом месте нет никакой ценности, вы просто пишете совершенно новому пользователю.
Если вы хотите обновить существующий узел без замены существующих значений, вам нужно либо вызвать setValue()
на нижнем узле, либо позвонить updateChildren()
.
Например, чтобы обновить свойство username
в /Users/$userId/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);