【问题标题】:writing data into firebase through an android application通过android应用程序将数据写入firebase
【发布时间】:2013-10-22 21:24:46
【问题描述】:

我是 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 存储库中的现有数据。 我刚刚尝试使用 getValue() 方法取回数据,但我只能获取 MAP 中的数据

编辑 2:在我的参考资料中不使用 push() 方法,我可以看到任何以前的数据都被覆盖了,只有最新的信息可用。我想知道它们是否是一种更好的方式来获取参考并仍然保持以前的信息

【问题讨论】:

    标签: android firebase


    【解决方案1】:

    所以看起来您拥有自己的唯一 ID 系统,在这种情况下,您不需要使用 .push 方法(这只是为新数据获取唯一引用的帮助器)。因此,您应该能够执行以下操作,而不是 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");
    

    您应该使用ref.updateChildren(updates),而不是使用.setValue。您可以从docs 中的示例中了解如何构造updates

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

    【讨论】:

      猜你喜欢
      • 2013-12-14
      • 2018-01-12
      • 2018-06-23
      • 1970-01-01
      • 2019-03-04
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多