我对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
上一个条目被删除
我尝试过以各种方式更改引用,但无济于事。在这方面的任何帮助将不胜感激。
答案 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");
应该添加新项目而不是覆盖它们