java - 求和运算期间 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 年。
解决方案
看来您的代码正在从快照中获取消耗的值,然后立即覆盖它:
int consumed = documentSnapshot.getLong("Consumed Calories: " +uid).intValue();
consumed = breakfast + lunch + dinner ;
这是故意的吗?它应该是消耗+=早餐...等吗?
推荐阅读
- javascript - React js将分组列数组转换为普通数组
- grammar - FEEL 语法:如何引用字符串文字语法规则指定的上下文条目?
- css - 我有一个带有转换的 html/css 代码。过渡在 Chrome 中工作正常,但在 IE 11 中失败。有人能指出问题吗
- jooq - 如何在 Jooq 中比较日期
- ngrx - Ngrx 大量数据导致应用程序变慢
- typescript - TypeScript:根据使用情况控制键的可选标志
- angular - 通过 API 调用更新数据时,swimlane/ngx-graph 链接不显示
- apache-spark - 如何使用 SparkSQL 根据多个条件在 Spark DF 中选择行
- c++ - 使用 CImg 和动态数组生成梯度
- c# - 由于未知原因,带有异步代码的并行 foreach 循环无法正确完成