Как продолжить поиск подходящего игрока, а затем остановить поиск в базе данных Firebase - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть 2 вопроса. Я хочу создать приложение-клон Firebase Chatroulette, в котором люди могут случайным образом совпадать и общаться друг с другом. В приложении у меня есть 3 статуса: ожидание, поиск людей и общение с человеком. Первый вопрос: как я могу всегдапроверять статус людей каждую секунду?. Второй вопрос: как я могу продолжать поиск, пока не появится пользователь со статусом «поиск».

public void Search(){
     count = 0;

     user_dbref.addValueEventListener(new ValueEventListener() {
         @Override
         public void onDataChange(DataSnapshot dataSnapshot) {
             for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                 User user2 = dataSnapshot1.getValue(User.class);
                 Log.i("ID-",user2.getUser_id());
                 if(user2.getStatus()=="searching"){

                     user.setStatus("chatting");
                     progressDialog.cancel();
                     user_dbref.child(user2.getUser_id()).child("status").setValue("chatting");
                     user_dbref.child(user.getUser_id()).child("status").setValue("chatting");
                 }
             }
         }

1 Ответ

0 голосов
/ 02 декабря 2018

как я могу всегда проверять статус людей каждую секунду?

Нет необходимости повторять опрос.Когда вы звоните addValueEventListener, Firebase будет активно отслеживать результаты этой ссылки или запроса.Если что-то изменится, он сразу же сообщит вам по телефону onDataChange с обновленными данными для запроса / местоположения.

как я могу продолжать поиск, пока не появится пользователь со статусом "поиск""?

Ваш текущий код уже продолжает прослушивать данные в user_dbref, пока вы не скажете им остановиться.Как только вы найдете совпадение, просто позвоните removeEventListener со ссылкой на слушателя.

Простой способ сделать это:

final ValueEventListener listener = user_dbref.addValueEventListener(new ValueEventListener() {
     @Override
     public void onDataChange(DataSnapshot dataSnapshot) {
         for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
             ...
             if(user2.getStatus()=="searching"){
                 ...

                 user_dbref.removeEventListener(listener);
             }
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...