如何在Java中向Firebase数据库中的数组添加多个项?
在我的Android Studio Java项目中,在Firebase实时数据库中,我正在为登录的用户设置最喜欢的食物。每次使用setValue时,它都会覆盖现有条目。我想添加多个食物,例如数组中的食物 下面是更新Firebase实时数据库的代码如何在Java中向Firebase数据库中的数组添加多个项?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,在我的Android Studio Java项目中,在Firebase实时数据库中,我正在为登录的用户设置最喜欢的食物。每次使用setValue时,它都会覆盖现有条目。我想添加多个食物,例如数组中的食物 下面是更新Firebase实时数据库的代码 FirebaseAuth.getInstance().getCurrentUser(); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); Fir
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);
与
似乎能把我带到我需要去的地方
{
"Users" : {
"ExampleUser1" : {
"-MZ4Cfec_EFb6i5bUIEl" : {
"foods" : "banana"
},
"-MZ4EJV14CKUvYn9ISJl" : {
"foods" : "apple"
}
}
}
}
编辑:
这就是我最终使用的解决方案。谢谢大家的帮助和评论
阵列不作为阵列存储在firebase实时数据库中 使用firebase实时数据库处理阵列有点棘手,它们不能按预期工作。Firebase将它们存储为键值对。为了得到想要的结果,我使用了一个哈希映射,在这里我可以设置键和值对。这是唯一需要的代码,我删除了用户类。字符串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);
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);
尝试update()并查看它是否有效
如果你想储存一系列的食物,你应该先在你的``中建模
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;
}
}
然后,您可以简单地将该数组设置为数据库:
{
"Users" : {
"UserExample1" : {
"banana" : "banana",
"apple" : "apple",
"orange" : "orange"
}
}
}
String userId = user.getUid();
User user1 = new User(new String[] {"banana", "apple"});
DatabaseReference mRef = database.getReference().child("Users").child(userId);
mRef.setValue(user1);
{
"Users" : {
"UserExample1" : {
"banana" : "banana",
"apple" : "apple",
"orange" : "orange"
}
}
}
我还建议您阅读以下内容,因为阵列是Firebase中常见的反模式:
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);
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);
虽然这已经有很多年了,但它的建议仍然适用。这是一个JavaScript代码的截图,而OP询问的是Android/Java。另外:请不要发布代码截图或其他文本内容。而是发布实际文本,并使用Stack Overflow的格式化工具对其进行标记。当然,会记住这一点。