从 Cloud Firestore 获取的值在求和操作期间出现重复

huangapple 未分类评论45阅读模式
英文:

Values From Cloud Firestore Duplicates During Sum Operation

问题

以下是您要翻译的内容:

我是Android开发的新手,想要创建一个Android卡路里计算器应用程序,食物的卡路里存储在云Firestore中。这个卡路里计数器由5个值组成(早餐、午餐、晚餐、消耗的卡路里和每日目标)。在为餐点分配卡路里之后,我想将它们累加到变量“消耗的卡路里”中,该变量是三餐(早餐、午餐和晚餐)的卡路里总和。每日目标是(每日目标 - 消耗的卡路里)。
当我添加一个食物,比如苹果=52千卡时,一切正常,但是当我再添加一个苹果时,每日目标变成了每日目标-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。

英文:

I am new to android developement and I want to create android calorie calculator app, calories of food are stored inside cloud firestore. This calorie counter is made of 5 value (breakfast,lunch,dinner,consumed_calories,and daily goal). After Calories are assigned to meal, I want to sum them into variable "consumed calories" which is the sum of 3 meals (breakfast,lunch and dinner). Daily Goal is (Daily Goal - Consumed Calories).
When I add one food eg. apple = 52 kcals, everything works fine, but when I add one more apple Daily Goal is = Daily Goal - 156 instead of 104, It takes value from inserted food and sum it with choosen calories.

从 Cloud Firestore 获取的值在求和操作期间出现重复

My Code For Food Insert:

 public void MealCalories(DocumentReference reference, int calories, TextView textView, String Meal) {
    reference.get().addOnSuccessListener(new OnSuccessListener&lt;DocumentSnapshot&gt;() {
        @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&lt;DocumentSnapshot&gt;() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {

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


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


                consumed = breakfast + lunch + dinner ;


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

            int daily_calories = documentSnapshot.getLong(&quot;Daily Goal: &quot; + uid).intValue();
     
            daily_calories = daily_calories - consumed;

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

        }
    });
}

从 Cloud Firestore 获取的值在求和操作期间出现重复

Daily Goal was supposed to be 1896.

答案1

得分: 0

看起来你的代码正在从快照中获取已消耗的值,然后立即进行覆盖:

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

这是有意为之吗?应该改成 consume += breakfast ... 这样吗?

英文:

It appears that your code is fetching the consumed value from the snapshot, and then immediately overwriting it:

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

Is this intentional? Should it be consume += breakfast ... etc?

huangapple
  • 本文由 发表于 2020年4月7日 18:15:02
  • 转载请务必保留本文链接:https://java.coder-hub.com/61077673.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定