2017-03-08 67 views
0

我在这里有一个像这样的数据库结构。计算Firebase记录值的总和

enter image description here

我的目标是获得总两项金额12000和15000的,这将是27000..However我曾尝试使用是给我一个价值像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()); 
      } 
     }); 

任何人有关于如何实现这一点的想法? 这里是我DogExpenditure类:

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; 
    } 
} 
+1

不能更改Amount Data类型为int吗?这样做更有意义,你可以避免字符串连接 – IsuruKusumal

回答

0

定义DogExpenditure dogExpenditure全球和使用此

 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()); 
     } 
    }); 
0

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

首先,在DogExpenditure改变amountdoubleint

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()); 
} 
+0

我如何将它转换为整数?我遇到了这个错误com.google.firebase.database.DatabaseException:无法将java.lang.String类型的值转换为int –

+0

在哪行发生了该错误?你是否像上面提到的那样改变了DogExpanditure和onDataChange? – koceeng

+0

等待,首先,您必须确保Firebase数据库中的每个数据量都存储为int。因为在截图中,我注意到它存储为'String'。您是使用Firebase控制台还是从Android应用创建这些数据? – koceeng