Java 如何在firebase上获取节点名称?

Java 如何在firebase上获取节点名称?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在为一家餐厅制作菜单,首先我想知道这个结构是否正确 如果不是,我如何改进它。 第二,我想检索子菜单名。例如,我想知道牛排的名称、描述和价格 DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); final DatabaseReference refNom = ref.child("Locales"); final DatabaseReference refNom = ref.chil

我正在为一家餐厅制作菜单,首先我想知道这个结构是否正确

如果不是,我如何改进它。 第二,我想检索子菜单名。例如,我想知道牛排的名称、描述和价格

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference refNom = ref.child("Locales");

final DatabaseReference refNom = ref.child("Locales");
            refNom.orderByChild("Nombre").equalTo(nombreLocal/*i'm getting this from a getExtra*/).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    lista.removeAll(lista);
    for (DataSnapshot ds1 : dataSnapshot.getChildren()) {

    String nomPlatillo = ds1.child("menu").getKey();
    String descPlatillo = ds1.child("menu")./*dish_name.child*/child("Description").getValue(String.class);
    double precio = ds1.child("menu")./*dish_name.child*/child("price").getValue(double.class);
    datosMenu menu = new datosMenu(nomPlatillo,descPlatillo,precio);
    lista.add(menu);
}

这是我的循环:

因为菜单将有很多项,我想如果您可以创建类似的项数组会更好

{
  "menu": [
    {
      "item": "Steak taco",
      "desc": "",
      "price": "5",
      "image_url": ""
    },{
      "item": "pizza",
      "desc": "",
      "price": "4",
      "image_url": ""
    }
  ]
}

这样就很容易进行迭代分析。

因为菜单将有很多项,我想如果您可以创建类似的项数组会更好

{
  "menu": [
    {
      "item": "Steak taco",
      "desc": "",
      "price": "5",
      "image_url": ""
    },{
      "item": "pizza",
      "desc": "",
      "price": "4",
      "image_url": ""
    }
  ]
}

这样就很容易进行迭代分析。

您缺少一个孩子。在
菜单
节点和
说明
键之间,树层次结构中还有一个步骤,
牛排塔可
。因此,要解决此问题,请更改以下代码行:

String descPlatillo = ds1.child("menu")./*dish_name.child*/child("Description").getValue(String.class);
double precio = ds1.child("menu")./*dish_name.child*/child("price").getValue(double.class);


还请注意,您使用的是
getValue(Double.class)
,而不是
getValue(Double.class)
您缺少一个孩子。在
菜单
节点和
说明
键之间,树层次结构中还有一个步骤,
牛排塔可
。因此,要解决此问题,请更改以下代码行:

String descPlatillo = ds1.child("menu")./*dish_name.child*/child("Description").getValue(String.class);
double precio = ds1.child("menu")./*dish_name.child*/child("price").getValue(double.class);


还请注意,is使用了
getValue(Double.class)
而不是
getValue(Double.class)

请分享如何从数据库中获取
dataSnapshot
,因为正确的解决方案取决于此。现在它已编辑完毕,请分享如何从数据库中获取
dataSnapshot
,因为正确的解决方案取决于此。现在我知道了,但是孩子的名字会不同,因为我会放不同的菜,名字会改变,所以我想得到那个节点的名字(在这个例子中是塔可牛排),在这种情况下,您应该使用
.child(您的变量)
而不是
.child(“牛排玉米卷”)
。其中
yourVariable
保存创建引用所需的任何内容。你不能让它为空。是的,但是,应用程序不知道菜肴的名称,所以我不能为每一道菜的名称创建一个变量,我想要的是得到该菜/节点的名称,因为名称是不同的。在这种情况下,在创建特定菜时,你需要在变量中保留该菜的值。这样你以后就可以在参考资料中使用它了,对吗?一切都好吗?你解决了这个问题吗?我知道,但是这个孩子的名字会不同,因为我会放不同的菜,名字会改变,所以我想得到这个节点的名字(在这个例子中是塔可牛排),以及它们各自的描述和价格。在这种情况下,你应该使用
.child(yourVariable)
而不是
.child(“牛排塔可”)
。其中
yourVariable
保存创建引用所需的任何内容。你不能让它为空。是的,但是,应用程序不知道菜肴的名称,所以我不能为每一道菜的名称创建一个变量,我想要的是得到该菜/节点的名称,因为名称是不同的。在这种情况下,在创建特定菜时,你需要在变量中保留该菜的值。这样你以后就可以在参考资料中使用它了,对吗?一切都好吗?你解决问题了吗?