Java 如何从Firebase实时数据库中检索所有手机的利润并将所有值相加
我正在创建一个销售-购买应用程序,我希望检索销售手机的所有利润,并将这些价值相加以获得总收入Java 如何从Firebase实时数据库中检索所有手机的利润并将所有值相加,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在创建一个销售-购买应用程序,我希望检索销售手机的所有利润,并将这些价值相加以获得总收入 mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { List<Float> lis
mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<Float> list = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
list.add(Float.valueOf(Float.parseFloat(ds.child("profit").getValue().toString())));
double sum = 0.0;
for (Float d : list) {
double floatValue = (double) d.floatValue();
Double.isNaN(floatValue);
sum += floatValue;
}
Toast.makeText(RecordsActivity.this, "Earning = " + sum, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(RecordsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
mDatabaseReference.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
add(Float.valueOf(Float.parseFloat(ds.child(“利润”).getValue().toString()));
双和=0.0;
对于(浮动d:列表){
double floatValue=(double)d.floatValue();
Double.isNaN(floatValue);
总和+=浮点数;
}
Toast.makeText(RecordsActivity.this,“Earning=“+sum,Toast.LENGTH_SHORT).show();
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Toast.makeText(RecordsActivity.this,databaseError.getMessage(),Toast.LENGTH_SHORT.show();
}
});
首先,我建议您将利润作为INT发送到数据库。然后,您可以在数据快照中找到节点下的数字总和,如下所示
@Override
public void onDataChange(@NonNull DataSnapshot
dataSnapshot) {
int sum=0;
for (DataSnapshot ds1:dataSnapshot.getChildren()){
int a=ds1.child("profit").getValue(Integer.class);
sum+=b;
int i = sum;
String value = String.valueOf(i);
Toast.makeText(RecordsActivity.this, value,
Toast .LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
})) 听起来像是一个清晰的用例。你已经试过什么了吗?如果是这样,请编辑您的问题以包括以下内容。如果你还没试过什么,我建议首先查看Firebase文档。我还没有做任何事情,我只是想知道如何从每个节点获取所有利润值并简单地添加它们。请帮助我是Firebase新手检查它我已更新问题如果
mDatabaseReference
指向数据库中的SaleList
节点,那么代码乍一看就很好了。运行此代码时有什么问题?特别是:如果在onDataChange
中的第一行上放置断点,然后单步执行代码,哪一行没有达到您期望的效果?我正在从这段代码中获取值,多亏了,剩下的问题是为值创建一个数组列表,并对所有值求和以获得最终结果。这段代码正常工作,但为什么toast消息不断更改其值,第一次toast值为true,但随后它会获取另一条记录。这是因为您使用的是addvalueventlistener。更改为添加单个事件值的侦听器有关addListenerforsingleevent的想法,请参阅此问题的答案。。。。使用addListenerforsingleevent时发生了什么?toast还在改变值吗?我可以看看你用来设置侦听器的代码吗