Значения из облачного Firestore дубликатов во время операции суммы - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в разработке android и хочу создать приложение калькулятора android calor ie, калории продуктов хранятся в облачном хранилище. Счетчик калорий ie состоит из 5 значений (завтрак, обед, ужин, потребленные калории и ежедневная цель). После того, как калории распределены на еду, я хочу суммировать их в переменную «потребляемые калории», которая представляет собой сумму трехразового питания (завтрак, обед и ужин). Ежедневная цель - (ежедневная цель - потребляемые калории). Когда я добавляю одну еду, например. яблоко = 52 килокалорий, все работает нормально, но когда я добавляю еще одну яблочную ежедневную цель - = ежедневная цель - 156 вместо 104, она берет значение из вставленной пищи и суммирует ее с выбранными калориями.

enter image description here

Мой код для вставки продуктов питания:

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

        }
    });
}

enter image description here

Предполагалось, что ежедневная цель составит 1896 год.

1 Ответ

0 голосов
/ 08 апреля 2020

Похоже, что ваш код извлекает потребленное значение из моментального снимка, а затем сразу же перезаписывает его:

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

Это преднамеренно? Стоит ли пить + = завтрак ... et c?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...