Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему в Firebase записывется только одна строка, заменяя предыдущую.

Alexey Poyarkov Ученик (140), на голосовании 1 год назад
У меня есть Firebase Realtime Database. Я из приложения присылаю туда строку. У каждого пользователя(создается в приложении) есть свой идентификатор и узел, доступ к котрому по идентификатору. Но когда один из юзеров отправляет новую строку, она заменяет предыдущую. Как это исправить?

Код отправки:
public void sendDataToFirebase(String string) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseAuth mAuth = FirebaseAuth.getInstance();
String userId = mAuth.getCurrentUser().getUid();

database.getReference("users/" + userId).setValue(string)
.addOnSuccessListener(aVoid -> {
Toast.makeText(this, "Данные отправлены на сервер", Toast.LENGTH_SHORT).show();
})
.addOnFailureListener(e -> {

});
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 1 год назад
Проблема заключается в том, что каждый раз, когда вы вызываете метод setValue(), он перезаписывает значение узла в Firebase. Чтобы исправить это, вы можете использовать метод push() вместо setValue().

Метод push() создает новый узел в Firebase с уникальным идентификатором, который генерируется автоматически. Это позволяет сохранять несколько значений для одного узла, не заменяя предыдущие значения.

Вот как вы можете изменить свой код, чтобы использовать метод push():
 public void sendDataToFirebase(String string) { 
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseAuth mAuth = FirebaseAuth.getInstance();
String userId = mAuth.getCurrentUser().getUid();

DatabaseReference userRef = database.getReference("users/" + userId);
String key = userRef.push().getKey(); // генерируем уникальный идентификатор
userRef.child(key).setValue(string)
.addOnSuccessListener(aVoid -> {
Toast.makeText(this, "Данные отправлены на сервер", Toast.LENGTH_SHORT).show();
})
.addOnFailureListener(e -> {

});
}
Теперь каждый раз, когда пользователь отправляет новую строку, она будет добавляться в Firebase как новый дочерний узел для узла пользователя, а не заменять предыдущее значение.
Alexey PoyarkovУченик (140) 1 год назад
Спасибо. Проблема решена.
Похожие вопросы