簡體   English   中英

求和運算期間 Cloud Firestore 中的值重復

[英]Values From Cloud Firestore Duplicates During Sum Operation

我是 android 開發的新手,我想創建 android 卡路里計算器應用程序,食物的卡路里存儲在雲火庫中。 這個卡路里計數器由 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 年。

看來您的代碼正在從快照中獲取消耗的值,然后立即覆蓋它:

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

這是故意的嗎? 它應該是消耗+=早餐...等嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM