2017-03-08 66 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