База данных Android Firebase объединяет несколько запросов

#android #asynchronous #firebase-realtime-database #android-recyclerview

#Android #асинхронный #firebase-база данных в реальном времени #android-recyclerview

Вопрос:

Я хочу показать список пользователей (используя 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.

Комментарии:

1. Что вы пробовали, что не сработало? Пожалуйста, отредактируйте вопрос, чтобы показать этот код, и объясните, что он делает, а не то, что вы ожидаете.

2. @DougStevenson я отредактировал свой вопрос, надеюсь, теперь все ясно.

3. Из добавленного кода, что именно не работает так, как вы ожидаете?

4. p.setComms(значение); не работает, это значение не отображается в RecyclerView, отображается информация о персонаже, но не это значение комментариев. Я знаю, что проблема в том, что запросы firebase являются асинхронными.