Firebase итерации медленные - PullRequest
0 голосов
/ 27 июня 2018

Я использую Firebase с Android для создания простого приложения чата. Когда пользователь выбирает другого пользователя для чата, я хочу проверить, общались ли они вместе или нет.

В методе onCreate() я извлекаю все комнаты, которые ранее использовал текущий пользователь, и помещаю их в массив, называемый MyChatRooms<>. Затем я хочу проверить каждую комнату, чтобы увидеть пользователей комнаты.

Проблема в том, что цикл, который я использую для перебора имен комнат, заканчивается, прежде чем я смогу извлечь какие-либо данные из базы данных.

Я знаю, что у меня есть похожие вопросы, но ни один из ответов не помог мне.

Вот соответствующий код:

if (!MYChatRooms.isEmpty()) {
  for (j = 0; j < MYChatRooms.size(); j++) {
    roomref.child(MYChatRooms.get(j)).child("First User").addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot1) {
        if (!dataSnapshot1.getValue().toString().equals(Username) && dataSnapshot1.getValue().toString().equals(NUsername)) {
          Users += dataSnapshot1.getValue().toString() + ",,, ";
        } else if (dataSnapshot1.getValue().toString().equals(Username)) {
          roomref.child(MYChatRooms.get(j)).child("Second User").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot2) {
              if (dataSnapshot2.getValue().toString().equals(NUsername)) {
                Users += dataSnapshot2.getValue().toString() + ",,, ";
              }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
          });
        }
      }

      @Override
      public void onCancelled(DatabaseError databaseError) {

      }
   });
  }
}

1 Ответ

0 голосов
/ 27 июня 2018

Я бы посоветовал вам изменить структуру ваших данных. Представьте себе, если у пользователя есть 100 чатов, это означает, что вам нужно запросить 200 раз до Firebase, что, конечно, не представляется возможным.

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

Структура в firebase может выглядеть примерно так:

  • Пользователь
    • recentChats
      • идентификатор другого пользователя
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...