Firebase会覆盖现有记录,而不是附加它们

时间:2017-04-23 11:08:16

标签: android json firebase firebase-realtime-database

我对Firebase有点新意,所以一直在玩,以帮助自己更熟悉它。因此,当我在玩实时数据库时,我试图将数据附加到JSON树。代码如下

mSaudi.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            count++;
            mHistory = mChildRef.child(Integer.toString(count));
            current = riyadh;
            mChildRef.setValue(riyadh);
            mHistory.push().setValue("riyadh");
        }
    });

我需要的树是这样的:

value:   
 1: some text   
 2: some other text

但实际发生的是:

value:
   1: some text

和更新

value:
   2:some text

上一个条目被删除

我尝试过以各种方式更改引用,但无济于事。在这方面的任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果要保存这两个值,则必须使用Hashmap等变量保存它们。如果您保存一个字符串,然后尝试在同一分支下保存另一个字符串,它将删除以前保存的所有内容。请尝试以下

HashMap<String, String> map = new HashMap<>();
map.put("1","String");
map.put("2","String");
mHistory.push().setValue(map);

这将保存两个字符串而不删除字符串。

如果您只想添加一个字符串

mHistory.push().child("1").setValue("Your first String");

最大的问题是每次使用push()时都会生成一个随机密钥,因此您必须将密钥保存为字符串并将其用作孩子的参考。

答案 1 :(得分:0)

在Firebase上设置值时,它将替换所有内容,并在引用下。

让我们说你有一个房子价值,有两个孩子:颜色尺寸

如果您只想在setValue()之前编辑颜色值,则必须更改要推送的参考颜色。

如果你的引用是getReference().child("houses")并且你在那里推了一些东西,那么它将取代那里的所有东西。这样做的方法是创建一个新的引用(或更新预览一个),如下所示:getReference().child("houses").child(houseKey).child("color")并将你的字符串推送到那里。

在您的示例中,您需要在push()方法之前添加要作为子项更改的字段。

另一种方式已经由 @ Janwilx72 告知并获取整个对象,在本地更新值并再次推送整个对象。

答案 2 :(得分:0)

你可以试试这个

mChildRef.child("2").setValue("some text");

应该添加新项目而不是覆盖它们