如何处理Firebase看到其异步的结果

时间:2017-10-23 14:52:08

标签: java android firebase firebase-realtime-database

如何从下面的代码返回combinedFoodItem。我一直在使用firebase不到一个星期,我仍然觉得这令人困惑。摘要是: 食物包含name和categoryId(来自FoodOption模型)

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

        }
    });

}

1 个答案:

答案 0 :(得分:1)

由于firebase以被动的方式工作,你可以返回元素但是要监听它们的变化。您可以在函数外定义combinedFoodItem(例如,作为类字段),然后将元素添加到列表中(如果要重置列表,则每次数据更改时清除列表取决于你的名单的行为)