Java 如何处理Firebase的结果

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<>()

如何从下面的代码中返回combinedFoodItem。我已经使用firebase不到一个星期了,但我仍然感到困惑。总结如下: 食品包含名称和类别ID,该名称和类别ID来自食品应用模型

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我必须使用不同的方法重写