Java 我无法在android studio中获取firebase数据值的总和
我正在使用android studio制作一个android应用程序。我已将其链接到firebase实时数据库。我想检索其中一个活动中一些子值的总和。这是我的json文件:-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
{
"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,因此它总是只有最后一个子项的值