Java 我无法在android studio中获取firebase数据值的总和

Java 我无法在android studio中获取firebase数据值的总和,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,我正在使用android studio制作一个android应用程序。我已将其链接到firebase实时数据库。我想检索其中一个活动中一些子值的总和。这是我的json文件:- { "Data" : { "UyhzVqsz1BVFKoePa2NEmlPFu382" : { "Budget" : { "Expanse" : { "Wedding&quo

我正在使用android studio制作一个android应用程序。我已将其链接到firebase实时数据库。我想检索其中一个活动中一些子值的总和。这是我的json文件:-

{
  "Data" : {
    "UyhzVqsz1BVFKoePa2NEmlPFu382" : {
      "Budget" : {
        "Expanse" : {
          "Wedding" : {
            "stData1" : "W",
            "stData2" : "Wedding",
            "stData3" : "111",
            "stData4" : "11111"
          }
        }
      },
      "Traffic" : {
        "Wedding" : {
          "-MYKeSN8GZ8WbI-8TfVB" : {
            "stData1" : "15 Apr 2021,06:43:00:pm",
            "stData2" : "Wedding",
            "stData3" : "kkk",
            "stData4" : "100"
          },
          "-MYLu2qPmt9qj1tJPkrP" : {
            "stData1" : "16 Apr 2021,00:30:47:am",
            "stData2" : "Wedding",
            "stData3" : "ddd",
            "stData4" : "200"
          }
        }
      }
    }
  }
}
我已经看到了很多解决这个问题的可能方法。我在我的应用程序中应用了很多方法。但是没有一个有效。下面的代码有点用词不当。现在的问题是,该代码带来了上次输入数据的值。我仍然无法获得所有子节点的总和

   myRef = myfire.getReference().child("Data").child(strUID).child("Traffic");

        myRef.child("Wedding").orderByChild("stData2").equalTo("Wedding").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()) {
                    int sum = 0;
                    String value = data.child("stData4").getValue(String.class);
                    assert value != null;
                    int total = Integer.parseInt(value);

                    sum= sum + total;

                        tvBalance.setText(String.valueOf(sum));
                    }
                }


            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


请给出一个实际示例。

您正在为每个子节点重置
总和。要解决此问题,请将
sum
变量拉到循环之外:

myRef = myfire.getReference().child("Data").child(strUID).child("Traffic");

myRef.child("Wedding").orderByChild("stData2").equalTo("Wedding").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        int sum = 0;
        for(DataSnapshot data: dataSnapshot.getChildren()) {
            String value = data.child("stData4").getValue(String.class);
            assert value != null;
            int total = Integer.parseInt(value);

            sum = sum + total;
        }
        tvBalance.setText(String.valueOf(sum));
    }


    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

移动
int和=0在循环之外,因为它在每次迭代中将sum设置为0,因此它总是只有最后一个子项的值