java - 如何在 Java 中的 Firebase 数据库中将多个项目添加到数组中?
问题描述
在我的 Android Studio Java 项目中,在 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);
这是用户 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 将它们存储为键值对。为了获得所需的结果,我使用了一个哈希映射,我可以在其中设置键和值对。这是唯一需要的代码,我删除了 User 类。字符串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"
}
}
}