简体   繁体   English

通过firebase android开发中的循环从子节点检索特定数据

[英]Retrieve specific data from child nodes through loop in firebase android development

I am trying to get specific value from firebase database.look at the code first. 我试图从firebase数据库中获取特定值。首先查看代码。 It's data base reference 它是数据库参考

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) {}
            }); ;

        }
    });


}

now the total cost is easily retrievable. 现在总成本很容易检索。 but specific data from a user like in here "Rabbani" for retrive his total amount i create a Query but i cannot access n_total value from the portion like dialogue box. 但是来自用户的特定数据,比如在这里“Rabbani”,我可以创建一个查询,但我不能从像对话框这样的部分访问n_total值。

Take a look database structure: 看看数据库结构:

firebase数据库

Now i want, to get the sum off all amount from name "Rabbani" so do same like for other name "Sobuj". 现在我想要从名称“Rabbani”获得所有金额的总和,所以像其他名称“Sobuj”一样。 is this process is right? 这个过程是对的吗? or is there any other process? 还是有其他过程吗? to retrieve separe users total amount? 检索separe用户总金额?

You don't need the nested listener to get Rabbani 's spending. 你不需要嵌套的监听器来获得Rabbani的支出。 Since this data is already present in databasedeposit , you can just use an if in your existing loop to track that: 由于此数据已存在于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