首页 > 解决方案 > 如何在 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"
    }
  }
}

标签: javaandroidfirebasefirebase-realtime-database

解决方案


尝试更新(),看看它是否有效

尝试这个。


推荐阅读