2017-02-01 1 views
0

У меня есть реальная простая база данных Firebase, в которой у меня есть 2 модели. A ListModel и a UserModel. В моих списках я использую метод push() для создания уникальных идентификаторов. Каждый уникальный идентификатор я хочу добавить в качестве ключа и «истинного», поскольку это значение под Users/[email protected],com/Lists. Когда я добавить первый список, база данных выглядит следующим образом:Как добавить определенный ключ с определенным значением в базе данных firebase с Android?

enter image description here

И все работает отлично, но когда я пытаюсь добавить еще один, база данных выглядит следующим образом: enter image description here

В Users/[email protected],com/Lists, первая из них перезаписывается второй вставкой. Как я могу добавить конкретный идентификатор и конкретное значение в качестве нового элемента, как показано ниже?

enter image description here

И это мой код:

final UserModel um = new UserModel(); 
um.setUserEmail("[email protected],com"); 
userDatabaseReference.setValue(um); 

ListModel lm = new ListModel(); 
lm.setListName(listName); 
listKeyDatabaseReference = listDatabaseReference.push(); 
listKey = listKeyDatabaseReference.getKey(); 
listKeyDatabaseReference.setValue(lm); 

listDatabaseReference.child(listKey).child("Users").child("[email protected],com").setValue("true"); 
userDatabaseReference.child("[email protected],com").child("Lists").child(listKey).setValue("true"); 

Заранее спасибо!

+0

Можете ли вы предоставить больше кода для того, как вы пишете и слушаете данные? Единственная строка, которую вы опубликовали, подходит для добавления записи, поэтому недостаточно для объяснения поведения, которое вы видите. –

+0

Я только что редактировал свое сообщение и добавил еще код. Благодаря! –

ответ

2

Проверьте official doc:

Для базовых операций записи, вы можете использовать setValue(), чтобы сохранить данные в указанной ссылки, заменяя существующие данные на этом пути.

Ваша проблема здесь:

userDatabaseReference.setValue(um); 

Таким образом, вы переопределение всех детей в userDatabaseReference пути.
Это означает, что первая запись в Users/[email protected],com/Lists просто удалена, когда вы добавляете вторую.

Перед использованием

userDatabaseReference.setValue(um); 

вы можете проверить , если запись существует.
Если не существует, используйте setValue, чтобы добавить пользовательскую модель со всеми ее данными.
Если он существует, просто пропустите этот шаг и добавьте данные в путь lists внутри того же пользователя.

+0

Спасибо за ваш ответ. Теперь я не знаю, но как я могу решить проблему? –

+0

Это зависит от вашей логики, но вы можете просто использовать serDatabaseReference.child («gmail @ gmail, com»). Child («Списки»). Child (listKey) .setValue («true»); без использования начального setValue. –

+0

Если я не использую начальный 'setValue', все данные из модели не будут добавлены в базу данных. Есть ли у вас другая идея? Благодаря! –

Смежные вопросы