我试图根据菜单类别检索一组餐馆菜单数据,并为每个菜单类别创建菜单项列表,并创建这些列表的HashMap,其中包含一个键类别。根据一组类别检索数据
下面的JSON树显示了我如何在餐馆ID下存储每个餐厅的菜单项。
"Menu" : {
"C39Jv1oVVdXbQdyCOcTQZyZnmC3x" : { //Restaurant ID
"applepie" : {
"item_category" : "Desserts",
"item_name" : "Apple Pie",
"item_price" : "280"
},
"chocopudding" : {
"item_category" : "Desserts",
"item_name" : "Chocolate Pudding",
"item_price" : "320"
},
"friedrice" : {
"item_category" : "Main Courses",
"item_name" : "Fried Rice",
"item_price" : "250"
},
"seafoodrice" : {
"item_category" : "Main Courses",
"item_name" : "Sea Food Fried Rice",
"item_price" : "300"
}
}
}
食物的类别每一家餐厅都存储在MenuCategories
节点
"MenuCategories" : {
"C39Jv1oVVdXbQdyCOcTQZyZnmC3x" : { //Restaurant ID
"Desserts " : true,
"Main Courses" : true
}
}
我试图根据上述数据集来实现是一样的东西:
- 列表1 :(菜单,菜单)//甜点
- 列表2 :(菜单,菜单)//主菜
这是我尝试(减去创建列表和HashMap的部分,以保持代码的简称):
数据库引用了两个节点:
mDatabase = FirebaseDatabase.getInstance().getReference().child("Menu").child(res_id);
mMenuCategoryRef = FirebaseDatabase.getInstance().getReference().child("MenuCategories").child(res_id);
数据检索:
List<String> menuCatList = new ArrayList<>();
mMenuCategoryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()){
menuCatList.add(data.getKey()); //adds all the categories to array list
}
for(String menuCat : menuCatList){
//I'm trying to retrieve items under each category
mDatabase.orderByChild("item_category").equalTo(menuCat).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()){
System.out.println("MenuListWithCat "+data.getKey()+" - "+data.getValue());
}
}
.....
根据我的代码,我只接收具有“主课程”类别的项目,这是我的println打印的项目。
`System.out.println("MenuListWithCat "+data.getKey()+" - "+data.getValue());`
MenuListWithCat friedrice - {item_name=Fried Rice, item_category=Main Courses, item_price=250}
MenuListWithCat seafoodrice - {item_name=Sea Food Fried Rice, item_category=Main Courses, item_price=300}
它完全跳过了“甜品”类别,为什么?
对此的任何帮助将是非常有帮助的。
如果您在'mMenuCategoryRef'的'onDataChange'中放置了一条日志语句,是否打印?换句话说:它是否无法自行检索类别?或者是在内部循环中检索这些类别的菜单项失败。 –
@FrankvanPuffelen是的,这两种类型都被检索并添加到'menuCatList'中。也许我用来在菜单节点下存储菜单项的结构不合适,有什么想法? – RamithDR
那么....你的数据结构肯定看起来有点不寻常。由于您已经在'/ Menu/$ restaurantId'下为每个餐厅提供了商品类别,所以我不明白为什么您需要'/ MenuCategories/$ restaurantId'。但代码似乎很好,所以我不知道为什么它不读内循环中的菜单项。也许别人发现了什么是错的。 –