在我的androidstudiojava项目中,在firebase实时数据库中,我正在为登录的用户设置最喜欢的食物。每次我使用setvalue时,它都会覆盖现有的条目。我想添加多种食物,如在一个数组。
下面是更新firebase实时数据库的代码
FirebaseAuth.getInstance().getCurrentUser();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase database = FirebaseDatabase.getInstance();
String userId = user.getUid();
User user1 = new User("banana");
DatabaseReference mRef = database.getReference().child("Users").child(userId);
mRef.setValue(user1);
下面是user java类
public class User {
public String foods;
//required default constructor
public User() {
}
public User(String foods) {
this.foods = foods;
}
public String getFoods() {
return foods;
}
public void setFoods(String foods) {
this.foods = foods;
}
}
在firebase中,这是我的json响应示例:
{
"Users" : {
"ExampleUser1" : {
"foods" : "banana"
}
}
}
更换
mRef.setValue(user1);
具有
mRef.push().setValue(user1);
似乎把我带到了我要去的地方。
{
"Users" : {
"ExampleUser1" : {
"-MZ4Cfec_EFb6i5bUIEl" : {
"foods" : "banana"
},
"-MZ4EJV14CKUvYn9ISJl" : {
"foods" : "apple"
}
}
}
}
编辑:这是我最终使用的解决方案。谢谢大家的帮助和评论。
在firebase实时数据库中,数组不是以数组的形式存储的,使用firebase实时数据库处理数组有点棘手,它们不能按预期工作。firebase将它们存储为键值对。为了得到想要的结果,我使用了一个哈希Map,在这里我可以设置键和值对。这是唯一需要的代码,我删除了用户类。字符串fruit就是一个例子,每次更新时,它都会被添加到该用户的数据库中。不允许重复条目,因为我将水果的值也设置为等于键。
String fruit="banana"
FirebaseAuth.getInstance().getCurrentUser();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase database = FirebaseDatabase.getInstance();
String userId = user.getUid();
DatabaseReference mRef = database.getReference().child("Users").child(userId);
Map<String, Object> updates = new HashMap<String,Object>();
updates.put(fruit, fruit);
mRef.updateChildren(updates);
以下是firebase实时数据库的json响应:
{
"Users" : {
"UserExample1" : {
"banana" : "banana",
"apple" : "apple",
"orange" : "orange"
}
}
}
3条答案
按热度按时间sqserrrh1#
试试update(),看看是否有效
ibrsph3r2#
如果你想储存一系列的食物,你应该先将其模型化到你的``中。
然后,您只需将该数组设置为数据库:
我还建议您阅读以下内容,因为数组是firebase中常见的反模式:
最佳实践:firebase中的阵列。
如果child的子级包含值,则执行firebase查询
ds97pgxw3#
在firebase实时数据库中,数组不是以数组的形式存储的,使用firebase实时数据库处理数组有点棘手,它们不能按预期工作。firebase将它们存储为键值对。为了得到想要的结果,我使用了一个哈希Map,在这里我可以设置键和值对。这是唯一需要的代码,我删除了用户类。字符串fruit就是一个例子,每次更新时,它都会被添加到该用户的数据库中。不允许重复条目,因为我将水果的值也设置为等于键。
以下是firebase实时数据库的json响应: