通过Android应用程序将数据写入firebase

时间:2013-10-15 06:59:03

标签: android firebase

我是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);

由于使用了推送引用,数据的存储方式如下:

-J5upSABqTLJ1Wfu-jFq  
 12345
   id: 12345
   name: abcd

在哪里 - 因为我希望数据存储如下:

12345
   id: 12345
   name: abcd

我不完全确定上面的代码示例是否是存储数据的正确方法。因为我希望能够在以后更新现有数据。有什么建议 ?

编辑1:我想我需要使用push,这样我就不会覆盖firebase repo中的现有数据。 我刚刚尝试使用getValue()方法获取数据,我只能获取MAP中的数据

编辑2:不使用带引号的push()方法,我可以看到之前的任何数据都被覆盖,只有最新信息可用。我想知道它们是否是获得参考的更好方法,并且仍然保留以前的信息

1 个答案:

答案 0 :(得分:16)

所以看起来你有自己独特的系统,在这种情况下你不需要使用.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)。您可以在docs

中查看如何构建updates示例
Map<String, Object> updates = new HashMap<String, Object>();
updates.put("first", "Fred");
updates.put("last", "Swanson");
nameRef.updateChildren(updates);