为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉丁的传说 2022-12-15 11:04:44
我正在尝试从 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);        }    });}现在总成本很容易计算出来。但是来自用户的特定数据,例如此处的“Rabbani”,用于检索他的总金额我创建了一个查询,但我无法从对话框之类的部分访问 n_total 值。看一下数据库结构:
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您不需要嵌套的侦听器来获取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

    }

}); ;


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信