Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中向Firebase数据库中的数组添加多个项?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

如何在Java中向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

在我的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);

似乎能把我带到我需要去的地方

{
  "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中常见的反模式:


阵列不作为阵列存储在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);

虽然这已经有很多年了,但它的建议仍然适用。这是一个JavaScript代码的截图,而OP询问的是Android/Java。另外:请不要发布代码截图或其他文本内容。而是发布实际文本,并使用Stack Overflow的格式化工具对其进行标记。当然,会记住这一点。