首页 > 解决方案 > 求和运算期间 Cloud Firestore 中的值重复

问题描述

我是 android 开发新手,我想创建 android 卡路里计算器应用程序,食物卡路里存储在 Cloud Firestore 中。这个卡路里计数器由 5 个值组成(早餐、午餐、晚餐、消耗卡路里和每日目标)。将卡路里分配给膳食后,我想将它们加总为可变的“消耗卡路里”,即三餐(早餐、午餐和晚餐)的总和。每日目标是(每日目标 - 消耗的卡路里)。当我添加一种食物时,例如。苹果 = 52 kcals,一切正常,但是当我再添加一个苹果每日目标时 = 每日目标 - 156 而不是 104,它会从插入的食物中获取价值,并将其与选择的卡路里相加。

在此处输入图像描述

我的食品插入代码:

 public void MealCalories(DocumentReference reference, int calories, TextView textView, String Meal) {
    reference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {

            int meal = documentSnapshot.getLong(Meal).intValue();
            meal = meal + calories;
            AddData(Meal, meal, reference);
            textView.setText(String.valueOf(meal));


            ConsumedCalories(calories);


        }
    });
}

public void ConsumedCalories(int calories) {
    MealRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {

            firebaseUser = FirebaseAuth.getInstance().getCurrentUser();


            int breakfast = documentSnapshot.getLong("Breakfast: " + uid).intValue();
            int lunch = documentSnapshot.getLong("Lunch: " + uid).intValue();
            int dinner = documentSnapshot.getLong("Dinner: " + uid).intValue();
            int consumed = documentSnapshot.getLong("Consumed Calories: " +uid).intValue();


                consumed = breakfast + lunch + dinner ;


            MealRef.update("Consumed Calories: " + uid, consumed);
            daily_goal.setText(String.valueOf(consumed));

            int daily_calories = documentSnapshot.getLong("Daily Goal: " + uid).intValue();

            daily_calories = daily_calories - consumed;

            MealRef.update("Daily Goal: "+ uid,daily_calories);

        }
    });
}

在此处输入图像描述

每日目标应该是 1896 年。

标签: javaandroidfirebasemathgoogle-cloud-firestore

解决方案


看来您的代码正在从快照中获取消耗的值,然后立即覆盖它:

int consumed = documentSnapshot.getLong("Consumed Calories: " +uid).intValue();
consumed = breakfast + lunch + dinner ;

这是故意的吗?它应该是消耗+=早餐...等吗?


推荐阅读