Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Firebase实时数据库中检索所有手机的利润并将所有值相加_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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还在改变值吗?我可以看看你用来设置侦听器的代码吗