Android 计算Firebase记录值之和
我这里有一个这样的数据库结构 我的目标是得到12000和15000这两个总数,即27000。然而,我尝试使用的代码给了我一个类似null1200015000的值。代码如下: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
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