【发布时间】:2018-05-07 01:40:44
【问题描述】:
我正在尝试使用按键排序的嵌套子级获取 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。一个restaurant 可以有多个menus,一个menus 可以有多个menuitems。他们使用特定的 Firebase 密钥插入。代码,我得到的数据是
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 和menuitems 的订单。
总而言之,我想得到整个restaurant 根,它的menus 和menuitems 我插入它们的顺序。我只想通过获得restaurant root 来做到这一点。有没有办法做到这一点?谢谢。
编辑:添加了上传数据的 Restaurant.class 和 JSON 版本。
【问题讨论】:
-
请考虑上传导出的 JSON 数据,而不是您的数据库的屏幕截图。您对
Restaurant.class的实施也会有所帮助。 -
我认为这种方式在视觉上更容易理解。但我会编辑这个问题。
-
只有在没有其他方式来解释您的意思时才应该上传图片。我指的是这个问题及其答案:meta.stackoverflow.com/questions/285551/…
-
如果您可以在本地(在您的代码中)对其进行排序,请查看名为
SortedList的对象,它可以轻松组织排序列表。但是如果你必须在服务器上排序,它可能会更复杂。
标签: android firebase firebase-realtime-database