我是新来的。我无法从Firebase数据库检索数据。我想检索每个类别的名称和food_items
。如何从Android中的Firebase实时数据库检索数据?
MYDATABASE
{
"categories" : {
"category1" : {
"name" : "Babyfood"
},
"category2" : {
"name" : "Dairy"
},
"category3" : {
"food_items" : {
"item1" : true,
"item2" : true
},
"name" : "Fruits"
}
},
"food_items" : {
"item1" : {
"category" : "category3",
"name" : "Apple"
},
"item2" : {
"category" : "category3",
"name" : "Banana"
}
}
}
FoodCategory.java
public class FoodCategory implements Serializable{
String name;
FoodItem food_items;
public FoodCategory(){}
public FoodCategory(String name, FoodItem food_items) {
this.name = name;
this.food_items = food_items;
}
public FoodItem getFoodItems() {
return food_items;
}
public String getName() {
return name;
}
public FoodCategory(FoodCategory category){
this.name = category.getName();
this.food_items = category.getFoodItems();
}
}
FoodItem.java
public class FoodItem {
String name;
public FoodItem(FoodItem foodItem) {
this.name = foodItem.getName();
}
public String getName() {
return name;
}
}
这里是我的用于检索每个类别的数据代码
mRootRef = FirebaseDatabase.getInstance().getReference();
mCategoryRef = mRootRef.child("categories");
mCategoryRef.addValueEventListener(new ValueEventListener() {
ArrayList<FoodCategory> values = new ArrayList<>();
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()){
FoodCategory c = snapshot.getValue(FoodCategory.class);
Log.d("Categories: ", c.name + " " + c.food_items);
values.add(c);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
它返回类别的姓名权价值,但空值food_items
。
每个类别包含类别的名称和食品项目列表。例如,类别3包含“水果”作为类别的名称,并且食品项目列表是{苹果,香蕉}(即Item1,来自food_items的项目2)。 food_categories的foodItems是FoodItems对象。我使用** HashMap food_items **但是,我仍然将food_items设置为null。 –
user2970035
感谢您的解释。这很有帮助。你能告诉我如何访问像category1嵌套键(它可以是任何随机键),我不知道,为什么我的构造函数没有使用此代码** snapshot.getValue(FoodCategory.class)**实例化。我必须用新操作员初始化它。 – user2970035
你必须知道你想得到什么密钥,即使它是随机的。然后像这样做'mRootRef.child(“categories/category1”)''。看看[本文档](http://stackoverflow.com/documentation/firebase-database/9242/reading-data/28681/understanding-which-data-referenced-by-getreference#t=201702282214462701557) – koceeng