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

时间:2018-05-26 01:53:44

标签: java android firebase firebase-realtime-database

我正在为餐馆制作菜单,首先我想知道这种结构是否正确。

enter image description here

 "menu" : {
    "Steak taco" : {
      "Description" : "Roasted steak with chipotle sauce taco.",
      "Price" : 5
    }
  }

如果不是,我该如何改进呢。 其次,我想要检索子菜单名称。例如,我想获得Steak taco名称,描述和价格

 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);
}

这是我的循环:

2 个答案:

答案 0 :(得分:1)

由于菜单会有很多项目,我想如果你可以创建类似的项目数组会更好

          toQueueRequest.onreadystatechange = function () {
          if (toQueueRequest.readyState === 4 && toQueueRequest.status === 200) {
              this.$.processingDialog.close();
              this.$.confirmDialog.open();
          } else if (toQueueRequest.readyState === 4){
            this.$.processingDialog.close();
            this.$.errorMsg="Ha ocurrido un error!"
            this.$.errorDialog.open();
          }
      };
      //var data = JSON.stringify({"RestoCode": window.location.pathname, "Fingerprint": this.finger});
      if (this.sector == "Cualquiera") {this.sector = null;};
      var data = JSON.stringify({"RestoCode": restoCode, "Fingerprint": finger, "PhoneNumber": this.cellno, "PersonalName": this.name, "QuantityPeople": this.pas, "SectorId": this.sector});
      toQueueRequest.send(data);

      this.$.reviewDialog.close();
      this.$.processingDialog.open();

这样可以很容易地迭代解析。

答案 1 :(得分:1)

你想念一个孩子。在menu节点和Description密钥之间,树层次结构中还有一个步骤Steak taco。所以要解决这个问题,请更改以下代码行:

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);

String descPlatillo = ds1.child("menu").child("Steak taco").getValue(String.class);
double precio = ds1.child("menu").child("Steak taco").getValue(Double.class);

另请注意,已使用getValue(Double.class)而非getValue(double.class)