如何在Android Studio中将具有值的节点和子节点添加到Firebase

时间:2018-12-03 23:18:32

标签: android firebase firebase-realtime-database

我正在学习如何构建android应用,希望能对此给予帮助。我想知道如何添加节点,然后将该节点的子节点添加到Firebase中。我正在使用Android Studio,并且已经通过push()保存了数据,但是在这种情况下,我不需要生成密钥,密钥已经存在。我需要添加食品杂货_列表_密钥_1,然后添加产品_密钥_x(其中有更多),并为产品_密钥_x分配值。

screenshot of firebase database

此键在屏幕截图上手动输入以进行演示。 Firebase为它们生成了字符串,因为它们是另一个表中的主键。我知道这是nosql数据库,但需要某种机制对其进行仿真。

在方法saveGL_withProducts中,我已在带有属性和值的节点杂货清单中输入GroceryList,并返回生成的密钥,我想将该密钥作为子项添加到具有产品列表的杂货清单products节点中。

public void saveGL_withProducts(GroceryListsModel groceryListsModel, List<GroceryListProductsModel> groceryListProductsModels){

    if (firebaseDatabase == null)
        firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference ref = firebaseDatabase.getReference().child(GROCERYLISTSNODE);
    DatabaseReference pushRef = ref.push();
    pushRef.setValue(groceryListsModel);
    String generated_GL_key = pushRef.getKey();


    if(!isNullOrBlank(generated_GL_key)){


        //TO DO ADDING IN GROCERYLISTPRODUCTS NODE



    }
    else{
        //TO DO

    }



}

赞赏任何建议。谢谢您的时间!

1 个答案:

答案 0 :(得分:0)

您可以查看文档here中的常见示例。 push方法将使用唯一键插入新节点,而setValue方法可用于将数据插入到特定节点。

要插入数据的节点可以通过以下方式指定:

User user = new User(name, email);
mDatabase.child("users").child(userId).setValue(user);

在这里,User类是一个POJO,它为数据提供结构。还应该可以使用描述映射的Map代替类。

在您的情况下,代码将类似于:

ref.child("grocery_list_key_1").child("product_key_1").setValue(data);

假设ref指向“ grocerylistproducts”节点。如您所见,您需要事先知道所有中间节点的名称,这样才能起作用。

此外,setValue方法将覆盖所有现有的节点信息。因此,如果仅要修改某些字段,则应使用here中所述的适当更新方法。