Как более эффективно получать и отображать всех друзей из списка друзей в приложении для чата Android

# #java #android #firebase #firebase-realtime-database

Вопрос:

Я работал над приложением для чата, которое скоро опубликую в магазине Google Play. Так что моя проблема в том, что при извлечении друзей из базы данных firebase. Я ищу каждый идентификатор пользователя, используя свое приложение, а затем, если он совпадает с идентификатором моих друзей, я показываю идентификатор. Таким образом, если у меня 2000 пользователей, он проверит каждого пользователя, а затем покажет мне одного друга, который съест процессор, а также может занять годы, если у меня всего 30 друзей.

Код приведен ниже.

 database.child(FirebaseAuth.getInstance().getUid()).child("friends")
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
                        list.clear();
                        for (DataSnapshot dataSnapshot2 : snapshot.getChildren()) {
                            String friends = dataSnapshot2.getValue(String.class);
                            database.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshot1) {
                                    for (DataSnapshot dataSnapshot : snapshot1.getChildren()) {
                                        if (dataSnapshot.getKey().equals(friends)) {
                                            Users users = dataSnapshot.getValue(Users.class);
                                            users.setUserId(dataSnapshot.getKey());
                                            list.add(users);
                                        }
                                    }
                                    adapter.notifyDataSetChanged();
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError error) {

                                }
                            });
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull @NotNull DatabaseError error) {
                    }
                });
 

Это небольшая часть выполнения всей работы, может кто-нибудь, пожалуйста, научить меня наиболее эффективному способу выполнения этой задачи.

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

1. Что именно в этом коде работает не так, как вы ожидаете? Расскажите нам, что не так с общим кодом. Есть ли у вас какие-либо ошибки?

2. @AlexMamo нет, у меня нет ничего неправильного в коде, просто проблема в том, что я хочу более эффективный способ. Мой код проверяет каждого пользователя и отображает его в представлении корзины, если uid является одним из uid моего друга в моем списке друзей. Проблема в коде заключается в том, что если у меня 200 пользователей, использующих мое приложение, то оно проверит 200 пользователей, а затем отобразит моего друга. Как вы можете видеть, будет здорово подождать, пока он сделает такую операцию.

Ответ №1:

Если у вас есть список токенов, и у вас есть папка, в которой эти токены являются именами папок, в которых хранятся эти пользователи, зачем вы анализируете весь список в поисках соответствия, если вы можете просто получить доступ к папке по токену