![](/img/trans.png)
[英]How to retrieve mulitple child nodes from firebase in android studio
[英]Retrieve specific data from child nodes through loop in firebase android development
我試圖從firebase數據庫中獲取特定值。首先查看代碼。 它是數據庫參考
DatabaseReference databasedeposit= FirebaseDatabase.getInstance().getReference("Deposit");
totalb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
databasedeposit.addListenerForSingleValueEvent (new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
abc.clear();
Integer total = 0;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ADeposit bazar = ds.getValue(ADeposit.class);
Integer cost = Integer.valueOf(bazar.getAmount());
total = total + cost;
abc.add(bazar);
}
Query queryn=databasedeposit.orderByChild("name").equalTo("Rabbani");
queryn.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Integer n_total=0;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ADeposit bazar = ds.getValue(ADeposit.class);
Integer c = Integer.valueOf(bazar.getAmount());
n_total = n_total + c;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
DepositList adapter = new DepositList(admininterface.this,abc);
deposit.setAdapter(adapter);
AlertDialog.Builder dialog1 = new AlertDialog.Builder(admininterface.this);
dialog1.setTitle("Notification");
dialog1.setMessage("Total Deposit : " +total );
dialog1.setIcon(R.drawable.ic_done_black_24dp);
dialog1.setNeutralButton(
"OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
dialog1.show();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
}); ;
}
});
}
現在總成本很容易檢索。 但是來自用戶的特定數據,比如在這里“Rabbani”,我可以創建一個查詢,但我不能從像對話框這樣的部分訪問n_total值。
看看數據庫結構:
現在我想要從名稱“Rabbani”獲得所有金額的總和,所以像其他名稱“Sobuj”一樣。 這個過程是對的嗎? 還是有其他過程嗎? 檢索separe用戶總金額?
你不需要嵌套的監聽器來獲得Rabbani
的支出。 由於此數據已存在於databasedeposit
,因此您只需在現有循環中使用if
來跟蹤:
databasedeposit.addListenerForSingleValueEvent (new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
abc.clear();
Integer total = 0;
Integer n_total=0;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ADeposit bazar = ds.getValue(ADeposit.class);
Integer cost = Integer.valueOf(bazar.getAmount());
total = total + cost;
abc.add(bazar);
if ("Rabbani".equals(ds.child("name").getValue(String.class)) {
n_total = n_total + cost;
}
}
System.out.println("total: "+total+", n_total: "+n_total);
...
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
}); ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.