Set.value заменяет существующие данные новыми - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь записать некоторые значения в базу данных firebase, но когда записывается новое значение, старое значение удаляется?

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("Messages");
        DatabaseReference userref= FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
        userref.setValue(Username);
        DatabaseReference keyReference = databaseReference.push();
        User user=new User("Mine message is here","Sender");
       keyReference.setValue(user);

1 Ответ

0 голосов
/ 09 мая 2019

В коде, которым вы поделились, вы звоните 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...