名称相等时,Firebase将对所有子节点求和

时间:2018-10-11 14:42:15

标签: android firebase firebase-realtime-database

嗨,我一直关注this Question,我知道这可能是重复的问题,但我的总数为空。我需要用orderByChild()equalTo()对所有子节点求和。我的Firebase结构。我需要总油量

enter image description here

预期产量

oil 83

更新

  

用户将在此处选择月份以查看费用,而我将从其他活动中获得费用。在Firebase结构中,October_2018monthYr

MainActivity

 listfirebaseref=FirebaseDatabase.getInstance().getReference("Expenses Details").child(username).child("Expense_Month").child(monthYr);
 Log.d("TAG","before");
    listfirebaseref.orderByChild("expensesName").equalTo("oil").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            int sum = 0;
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                for (DataSnapshot data : ds.getChildren()) {
                    Log.d("Tag", "on ");
                    Toast.makeText(MonthTotalexpenses.this,""+sum,Toast.LENGTH_SHORT).show();

                    Log.d("Tag", " " + sum);
                }

            }
            Log.d("Tag", " list ");
            }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

我知道我已经接近了,但是我想念的地方。请帮助

我的日志

enter image description here

它不会打印此Log.d("Tag", " " + sum);

Firebase规则

{
  "rules": {
    ".read": true,
    ".write": true

    ,"Expenses Details": {
      ".write": "query.orderByChild != null && query.equalTo != null",
      "$uid": {
     ".indexOn": "expensesName"
  }
}

  }


}
  

如果我从orderByChild中删除了equalTolistfirebaseref.orderByChild("expensesName").equalTo("oil").addValueEventListener,它将进入For循环,如果我再次添加orderByChildequalTo,它将不会进入for循环

1 个答案:

答案 0 :(得分:0)

更改

 listfirebaseref.orderByChild("expenseName").equalTo("oil")

listfirebaseref.orderByChild("expensesName").equalTo("oil")