[英]Adding (Sum) multiple Firebase child values together to give a total value?
我正在構建一個卡路里計數器作為 Android 應用程序的一部分,我想在前端顯示每餐的總克值。 到目前為止,我只檢索一個子值。 添加新餐后,我如何為總金額添加價值?
食物片段
mealRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds : snapshot.getChildren()) {
ds.getKey();
long sum = 0;
String grams = ds.child("grams").getValue(String.class);
if (grams == null) {
textViewFoodCounter.setText("0");
} else {
sum = sum + Integer.parseInt(grams);
textViewFoodCounter.setText(String.valueOf(sum));
}
progressBar.setMax(1000); // make dynamic
ObjectAnimator.ofInt(progressBar, "progress", Integer.parseInt(grams))
.setDuration(300)
.start();
Meal data = ds.getValue(Meal.class);
meals.add(data);
}
foodAdapter = new FoodAdapter(meals);
foodRecyclerView.setAdapter(foodAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
添加新餐
logMeal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String foodName = mealName.getText().toString().trim();
String calories = caloriesET.getText().toString().trim(); // potentially make this an integer?
String grams = gramsET.getText().toString().trim(); // potentially make this an integer?
meal = new Meal(grams, foodName, calories);
databaseReference.child("meals").child(dateString).push().setValue(meal)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.d("Event", "onComplete: Successfully added event information to Dog");
progressBar.setVisibility(View.GONE);
Toast.makeText(AddNewMeal.this, "Successfully added new meal", Toast.LENGTH_LONG).show();
} else {
Log.d("Event", "Failure - Dog not Created", task.getException());
progressBar.setVisibility(View.GONE);
Toast.makeText(AddNewMeal.this, "Meal not added, please try again..", Toast.LENGTH_LONG).show();
}
}
});
});
Firebase 層次結構:
要獲取每天每餐下存在的總克數,請使用以下代碼行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference mealsRef = rootRef.child("meals");
mealsRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
int total = 0;
for (DataSnapshot dateSnapshot : task.getResult().getChildren()) {
for (DataSnapshot mealSnapshot : dateSnapshot.getChildren()) {
String grams = mealSnapshot.child("grams").getValue(String.class);
total += Integer.parseInt(grams)
}
}
Log.d("TAG", "total: " + total);
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
根據您的屏幕截圖,logcat 中的結果將是:
totalCalories: 320
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.