我正在尝试获取具有按键排序的嵌套子项的 Firebase 的根。我的数据结构是这样的:
"-Ka3rbdLvH0I8X1Lg4of" : {
"menus" : {
"-KaD6U8_n5CPbRmAhgM2" : {
"menuItems" : {
"-KaD6UEoDvrm1W1a55AR" : {
"name" : "Annemin Kahvaltısı"
},
"-KaD6UKf0DyPja-Rni0X" : {
"name" : "Sıcak Kahvaltı",
},
"-KaD6UQyrJ1p5Ok9oya4" : {
"name" : "Anadolu Kahvaltısı",
},
"name" : "Sahanda Ürünler"
},
"-KaD6VgvHIj37Qyrirw1" : {
"menuItems" : {
"-KaD6Von-sz1xqPLeI5I" : {
"name" : "Sade Omlet",
},
"-KaD6Vvg0cOBFuABbtuU" : {
"name" : "Mantarlı Omlet",
},
"name" : "Omletler"
},
我有一个 restaurant -> menus -> menuItems
。一个餐厅
可以有多个菜单
,一个菜单
可以有多个菜单项
。他们插入了特定的 Firebase key 。代码,我正在获取数据
mDatabase.child("restaurants").child(lastResIdFirebaseKey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
currentRest = snapshot.getValue(Restaurant.class);
tv_resName.setText(currentRest.getName());
tv_resDesc.setText(currentRest.getAddress());
iv_resImage.setImageResource(R.drawable.default_restaurant);
}
@Override
public void onCancelled(DatabaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
在我的 java 类实现中;我正在将子节点映射到 hasmap 之类的;
public HashMap<String,Menu> menus;
餐厅类
public class Restaurant {
private String name;
private String description;
public HashMap<String,Menu> menus;
public Restaurant() {}
public Restaurant(String name, String descriptioArrayList<Menu> menus)
{
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public HashMap<String, Menu> getMenus() {
return menus;
}
public void setMenus(HashMap<String, Menu> menus) {
this.menus = menus;
}
}
一切正常,我成功获取了 restaurant
根并将其映射到类。但是,menu
和 menuitems
顺序与从 Firebase 插入时的顺序不同。
我检查了数据快照,它们来自 Firebase,未排序。我知道 orderbykey()
或 getChildren()
获取插入订单的数据,但我正在尝试为两个子 menus
和 菜单项
。
总而言之,我想要获得整个 restaurant
根目录、它的 menus
和 menuitems
我插入它们的顺序。我只想通过获取 restaurant
root 来做到这一点。有什么办法吗?谢谢。
编辑:添加了 Restaurant.class 和上传数据的 JSON 版本。
最佳答案
试试这个:
mDatabase.child("restaurants").child("restaurant_key").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ArrayList<Menu> menuArrayList = new ArrayList<>();
for(DataSnapshot menu : dataSnapshot.child("menus").getChildren()) {
ArrayList<String> menuItemArrayList = new ArrayList<>();
for(DataSnapshot menuItem : menu.child("menuItems").getChildren()) {
menuItemArrayList.add(menuItem.child("name").getValue().toString());
}
menuArrayList.add(new Menu(menu.child("name").getValue().toString(), menuItemArrayList));
}
currentRes = new Restaurant(dataSnapshot.child("name").getValue().toString(), dataSnapshot.child("description").getValue().toString(), menuArrayList);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) { }
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) { }
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
@Override
public void onCancelled(DatabaseError databaseError) { }
});
如果您不明白我在做什么,请发表评论,我会编辑我的答案。
关于android - 嵌套子项中的 Firebase orderbykey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41607814/