You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对多个Firebase子节点值求和,实现Android卡路里计数器餐食总克数展示

问题原因

你当前代码的核心问题是总克数累加变量的定义位置错误:long sum = 0被放在了for循环内部,每遍历一个餐食节点就会把sum重置为0,最终只能展示最后一个餐食的克数,无法得到所有餐食的累加结果。

修复代码

FoodFragment 逻辑修改

mealRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        // 累加变量移到循环外部初始化,避免每次遍历被重置
        long totalGrams = 0;
        // 先清空旧餐食列表,避免重复加载数据
        meals.clear();

        for (DataSnapshot ds : snapshot.getChildren()) {
            String gramsStr = ds.child("grams").getValue(String.class);
            if (gramsStr != null) {
                totalGrams += Integer.parseInt(gramsStr);
            }
            Meal meal = ds.getValue(Meal.class);
            meals.add(meal);
        }

        // 遍历完成后统一更新UI,减少不必要的刷新
        textViewFoodCounter.setText(String.valueOf(totalGrams));
        progressBar.setMax(1000); // 后续可替换为动态目标值
        ObjectAnimator.ofInt(progressBar, "progress", (int) totalGrams)
                .setDuration(300)
                .start();

        foodAdapter = new FoodAdapter(meals);
        foodRecyclerView.setAdapter(foodAdapter);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        Log.e("FoodCounter", "数据加载失败", error.toException());
    }
});

AddNewMeal 逻辑说明

你目前使用的addValueEventListener是实时监听,只要当日餐食节点有新增数据,FoodFragment的监听回调会自动触发,重新计算总克数并刷新UI,AddNewMeal页面不需要额外修改累加逻辑。

可选优化方案

  • 建议将Meal类中的grams、calories字段改为int类型存储,避免每次读取都要做字符串转整型的操作,同时降低空值异常概率
  • 如果后续餐食数量较多、前端遍历计算效率低,可以在Firebase中单独存储每日总克数字段,新增餐食时用Firebase原子累加操作直接更新总数值,无需前端遍历:
// 新增餐食同时更新总克数
Map<String, Object> updateData = new HashMap<>();
String mealKey = databaseReference.child("meals").child(dateString).push().getKey();
updateData.put("/meals/" + dateString + "/" + mealKey, meal);
updateData.put("/dailyTotal/" + dateString + "/grams", ServerValue.increment(Integer.parseInt(grams)));
databaseReference.updateChildren(updateData);

内容的提问来源于stack exchange,提问作者Caitlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:24:01