答案 0 :(得分:1)
正如我在您的数据库中看到的那样,您的amount
属性的类型为String而不是number。因此,您不能简单地创建String文字的总和。要解决此问题,您需要将属性名称更改为number
类型。我还看到您正在将货币和数字一起存储。您应该以编程方式在用户端而不是在数据库中添加货币。如果您考虑更改amount
属性的类型,请从此 post
但是,如果要保留实际的数据库结构,则可以使用以下技巧对所有金额求和:
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int total = 0;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String amount = ds.child("amount").getValue(String.class);
int value = Integer.valueOf(amount.replace(" Rs.", ""));
total =+ value;
}
Log.d("TAG", String.valueOf(total) + " Rs.");
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
your_database_reference.addListenerForSingleValueEvent(eventListener);
您的logcat中的输出将是:
27000
答案 1 :(得分:0)
您可以为此使用firebase的addValueEventListener方法,并循环dataSnapshot以计算每个子项的总数
your_database_reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int totalamount = 0;
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
// TODO: handle the dataSnapshot
String amount = snapshot.child("amount").getValue();
// remove _Rs. from amount and typecase it to int
totalAmount += amount;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});