簡體   English   中英

通過firebase android開發中的循環從子節點檢索特定數據

[英]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值。

看看數據庫結構:

firebase數據庫

現在我想要從名稱“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM