Java 如何处理Firebase的结果
如何从下面的代码中返回combinedFoodItem。我已经使用firebase不到一个星期了,但我仍然感到困惑。总结如下: 食品包含名称和类别ID,该名称和类别ID来自食品应用模型Java 如何处理Firebase的结果,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,如何从下面的代码中返回combinedFoodItem。我已经使用firebase不到一个星期了,但我仍然感到困惑。总结如下: 食品包含名称和类别ID,该名称和类别ID来自食品应用模型 public void getFoodItems() { //get all the food options for the selected venue final List<FoodItem> combinedFoodItem = new ArrayList<>()
public void getFoodItems() {
//get all the food options for the selected venue
final List<FoodItem> combinedFoodItem = new ArrayList<>();
filterRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
final FoodOption foodOption = dataSnapshot1.getValue(FoodOption.class);
final List<Food> foodList = new ArrayList<>();
meniItemFilter = menuItemReference.orderByChild("categoryId").equalTo(foodOption.getKey());
meniItemFilter.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot2 : dataSnapshot.getChildren()) {
Food food = dataSnapshot2.getValue(Food.class);
foodList.add(food);
}
FoodItem foodItem = new FoodItem(foodOption.getFoodCategory(), foodList, R.drawable.ic_banjo);
combinedFoodItem.add(foodItem);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
由于firebase的工作方式是被动的,所以您不能返回元素,而是监听元素的更改。您可以在函数外部定义combinedFoodItem,例如,这是一个类字段,然后将元素添加到列表中,或者在每次数据更改时清除列表,如果您想重置列表,这取决于列表的行为。您解决了问题吗?@AlexMamo我必须使用不同的方法重写