запись данных в firebase через приложение для android

Я новичок с firebase и пытаюсь использовать это в качестве бэкэнда для android-приложения для хранения данных. Формат данных-пара ключ,значение.

Это код, который я использую для хранения данных :

Map<Integer, PersonData> map = new HashMap<Integer, PersonData>();
map.put(PersonData.getID(), new PersonData("abcd", 12345));
Firebase ref = new Firebase(url).push();
ref.setValue(map);

из-за используемой ссылки push данные сохраняются следующим образом :

-J5upSABqTLJ1Wfu-jFq  
 12345
   id: 12345
   name: abcd

где-как я хочу, чтобы данные хранились так:

12345
   id: 12345
   name: abcd

Я не совсем уверен, что пример кода выше является правильным способ хранения данных. Поскольку я хочу иметь возможность обновлять существующие данные в более поздний момент времени . Есть предложения ?

EDIT 1: я думаю, что мне нужно использовать push, чтобы я не переписывал существующие данные в репо firebase. Я только что попытался вернуть данные с помощью метода getValue (), и я могу только получить данные, которые находятся в MAP

EDIT 2: без использования метода push () с моей ссылкой Я вижу, что любые предыдущие данные перезаписываются и только последняя информация. Мне интересно, являются ли они лучшим способом получить ссылку и по-прежнему поддерживать предыдущую информацию

1 ответов


таким образом, похоже, у вас есть собственная система уникальных идентификаторов, и в этом случае вам не нужно использовать .push метод (это просто помощник для получения уникального ref для новых данных). Поэтому вместо push вы должны быть в состоянии сделать:

Map<Integer, PersonData> map = new HashMap<Integer, PersonData>();
map.put(PersonData.getID(), new PersonData("abcd", 12345));
Firebase ref = new Firebase(url).child("12345");
ref.setValue(map);

предполагая, что ваш id "12345" и url указывает на место, где вы хотите сохранить все ваши persons.

обновить данные без перезаписи, ваш ref будет:

Firebase ref = new Firebase(url).child("12345");

и вместо использования .setValue вы хотели бы использовать ref.updateChildren(updates). Вы можете увидеть, как структурировать updates из примера в docs:

Map<String, Object> updates = new HashMap<String, Object>();
updates.put("first", "Fred");
updates.put("last", "Swanson");
nameRef.updateChildren(updates);