Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Android 计算Firebase记录值之和_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 计算Firebase记录值之和

Android 计算Firebase记录值之和,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我这里有一个这样的数据库结构 我的目标是得到12000和15000这两个总数,即27000。然而,我尝试使用的代码给了我一个类似null1200015000的值。代码如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mystatement); li

我这里有一个这样的数据库结构

我的目标是得到12000和15000这两个总数,即27000。然而,我尝试使用的代码给了我一个类似null1200015000的值。代码如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mystatement);
        listview = (ListView) findViewById(R.id.listview);

        textView4 = (TextView) findViewById(R.id.textView4);


        dref = FirebaseDatabase.getInstance().getReference();


        DatabaseReference dref = FirebaseDatabase.getInstance().getReference();
        dref = dref.child("Expenditure");

        dref.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    //Getting the data from snapshot
                    DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);

                    //Adding it to a stringString expenses = "Amount: "+dogExpenditure.getAmount()+"\nReason for Use: "+dogExpenditure.getItem()+"\n\n";

                    String amount =  dogExpenditure.getAmount();


                    textView4.setText(amount);
                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }


            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });
有人对如何实现这一点有想法吗??? 这是我的课程:

public class DogExpenditure {
    private String amount;
    private String item;

    public String getAmount() {
        return amount;
    }

    public void setAmount(String amount) {
        this.amount = amount;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }
}

全局定义DogExpense DogExpense并使用

     dref.addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                //Getting the data from snapshot
                DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);

                //Adding it to a stringString expenses = "Amount: "+dogExpenditure.getAmount()+"\nReason for Use: "+dogExpenditure.getItem()+"\n\n";


            }

         if(dogExpenditure.size()>0){

             int amt=0;
            for(int i=0;i<dogExpenditure.size();i++){

                 amt =amt+Integet.parseInt(dogExpenditure.get(i).getAmount())

              }

          textView4.setText(""+amt);
          }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }


        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());
        }
    });
dref.addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
对于(DataSnapshot postSnapshot:snapshot.getChildren()){
//从快照获取数据
DogExpression dogExpression=postSnapshot.getValue(dogExpression.class);
//将其添加到stringString expenses=“Amount:”+DogExpansion.getAmount()+“\n使用原因:“+DogExpansion.getItem()+”\n\n”;
}
如果(dogExpense.size()>0){
国际金额=0;

对于(int i=0;i全局定义支出并使用

     dref.addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                //Getting the data from snapshot
                DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);

                //Adding it to a stringString expenses = "Amount: "+dogExpenditure.getAmount()+"\nReason for Use: "+dogExpenditure.getItem()+"\n\n";


            }

         if(dogExpenditure.size()>0){

             int amt=0;
            for(int i=0;i<dogExpenditure.size();i++){

                 amt =amt+Integet.parseInt(dogExpenditure.get(i).getAmount())

              }

          textView4.setText(""+amt);
          }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }


        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());
        }
    });
dref.addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
对于(DataSnapshot postSnapshot:snapshot.getChildren()){
//从快照获取数据
DogExpression dogExpression=postSnapshot.getValue(dogExpression.class);
//将其添加到stringString expenses=“Amount:”+DogExpansion.getAmount()+“\n使用原因:“+DogExpansion.getItem()+”\n\n”;
}
如果(dogExpense.size()>0){
国际金额=0;

对于(int i=0;i如果我理解正确,它应该非常简单:

首先,将
dogExpense
中的
amount
更改为
double
int

public class DogExpenditure {
    private int amount;
    ...
    public int getAmount() {
        return amount;
    }
    ...
}
然后在你的
onDataChange()
中,只需按每个
amount
值递增即可。如下所示:

public void onDataChange(DataSnapshot snapshot) {
    int totalAmount = 0;
    for (DataSnapshot postSnapshot : snapshot.getChildren()) {
        DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);
        totalAmount += dogExpenditure.getAmount();
    }
    textView4.setText(totalAmount.toString());
}

如果我理解正确,应该很简单:

首先,将
dogExpense
中的
amount
更改为
double
int

public class DogExpenditure {
    private int amount;
    ...
    public int getAmount() {
        return amount;
    }
    ...
}
然后在你的
onDataChange()
中,只需按每个
amount
值递增即可。如下所示:

public void onDataChange(DataSnapshot snapshot) {
    int totalAmount = 0;
    for (DataSnapshot postSnapshot : snapshot.getChildren()) {
        DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);
        totalAmount += dogExpenditure.getAmount();
    }
    textView4.setText(totalAmount.toString());
}

你不能将金额数据类型更改为int吗?这样做更有意义,并且可以避免字符串连接。你不能将金额数据类型更改为int吗?这样做更有意义,并且可以避免字符串连接。如何将其转换为整数?我遇到了以下错误com.google.firebase.database.DatabaseException:Failed to co请输入java.lang.String类型的值以输入该错误发生在哪一行?您是否更改了
DogExpanditure
onDataChange
,就像我上面提到的那样?哦,等等,首先,您必须确保Firebase数据库中
amount
的所有数据都存储为int。因为在屏幕截图中,我注意到它是stor编辑为
String
。您是在Firebase控制台中还是从Android应用程序中创建这些数据的?从我的adroid apptextView4.setText(totalAmount);此行有一个问题..这是将整数解析为文本视图的正确方法吗?它给出以下错误:android.content.res.Resources$NotFoundException:String resource ID#0x61a8 at android.content.res.Resources.gettext如何将其转换为整数?我有遇到此错误com.google.firebase.database.DatabaseException:未能将java.lang.String类型的值转换为intAt该错误发生在哪一行?您是否像我上面提到的那样更改了
doexpanditure
onDataChange
?哦,等等,首先,您必须确保Fireb中的每个
amount
ase数据库存储为int。因为在屏幕截图中,我注意到它存储为
String
。您是在Firebase控制台中还是从Android应用程序中创建这些数据的?从我的adroid apptextView4.setText(totalAmount);此行有问题..将整数解析为文本视图是否正确。它给出以下错误:android.content.res.Resources$NotFoundException:String resource ID#0x61a8 at android.content.res.Resources.getText