7

我是 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() 方法,我可以看到任何以前的数据都被覆盖了,只有最新的信息可用。我想知道它们是否是获取参考信息并仍保持先前信息的更好方法

4

1 回答 1

15

因此,看起来您拥有自己的唯一 ID 系统,在这种情况下,您不需要使用该.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中的示例中查看如何构建:

Map<String, Object> updates = new HashMap<String, Object>();
updates.put("first", "Fred");
updates.put("last", "Swanson");
nameRef.updateChildren(updates);
于 2013-10-18T13:38:27.410 回答