Java Firebase数据库检索多个子项的总和
我想对Firebase实时数据库中的多个子节点求和 这是我的数据库,在这里我想做一个“amount”子项的总和,那么怎么做呢Java Firebase数据库检索多个子项的总和,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想对Firebase实时数据库中的多个子节点求和 这是我的数据库,在这里我想做一个“amount”子项的总和,那么怎么做呢 请帮忙 您可以使用firebase的addValueEventListener方法对此和循环dataSnapshot计算每个子项的总数 your_database_reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapsh
请帮忙 您可以使用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());
// ...
}
});
正如我在数据库中看到的,您的
amount
属性的类型是String而不是number。因此,不能简单地创建字符串文字的总和。要解决此问题,您需要将属性名称更改为number
类型。我还看到您将货币与号码一起存储。您应该以编程方式将货币添加到用户端,而不是数据库中。如果您想更改<代码>类型> <代码>属性,请参阅此强< < /强> 的答案。
但是,如果要保持实际的数据库结构,可以使用以下技巧将所有金额相加:
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
听起来有可能。从列表中读取数据并使用此API获取金额应该相当简单:您已经尝试了什么?是的,它工作正常,非常感谢您的帮助。。!