首页 > 解决方案 > Android Firebase 数据库组合多个查询

问题描述

我想显示一个用户列表(使用 RecyclerView ,适配器 ...),该列表包含用户信息(照片,姓名,电子邮件 ....)以及关于该用户的评论计数,用于我制作的用户信息一个firebase查询,我得到了我想要的所有信息

al = new ArrayList<>();

    FirebaseDatabase.getInstance().getReference().child("Seeker").child(categorie).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            // clear data before
            al.clear();

            for (DataSnapshot dataLoop : dataSnapshot.getChildren()) {
                String getcity = dataLoop.child("City").getValue().toString().trim();



                if (getcity.equalsIgnoreCase(City.trim())) {

                    p = new Person();

                    p.setName(dataLoop.child("Name").getValue(String.class));
                    p.setId(dataLoop.child("Id").getValue(String.class));

                    if (dataLoop.hasChild("urlToImage")) {
                        p.setUrl(dataLoop.child("urlToImage").getValue(String.class));

                    } else {
                        p.setImage(R.drawable.profile);
                    }
                    
                    readData(new MyCallback() {
                        @Override
                        public void onCallback(String value) {
                            Log.d("TAG", value);
                            p.setComms(value);
                        }
                    }, dataLoop.child("Id").getValue(String.class));

                    al.add(p);
                }

            }
            md = new MyAdaptor(MyClass.this, al);
            rv.setAdapter(md);
        }

……

            public void readData(final MyCallback myCallback, String value) {
                database.child("Review").child(value).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot dataLoop : dataSnapshot.getChildren()) {
                            count = dataLoop.getChildrenCount();
                            Log.d("TAG", "count = " + count);
                            p.setComms(String.valueOf(count));
                        }
                        myCallback.onCallback(String.valueOf(count));
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {}
                });
        }

        public interface MyCallback {
                void onCallback(String value);
        }

我的问题是我想为每个用户添加一个更多信息,这是每个用户的评论计数,我尝试在循环内进行另一个查询,但是由于 firebase 调用是异步的,它不起作用,布局不显示数量评论。

这是我的 Firebase 数据库结构的示例

-Review
    -HDGFDGDGDB (user id)
       -FSETTDGDG (user who made the review)
           -1 : review1
           -2 : review2


-Seeker
    -HDGFDGDGDB (user id)
        -city : "NY"
        -name : "Jhon"......

什么是结合这两个查询以显示 recyclerView 中的所有信息的最佳解决方案。

标签: androidasynchronousfirebase-realtime-databaseandroid-recyclerview

解决方案


推荐阅读