如何继续搜索匹配的玩家,然后在Firebase数据库中停止搜索

时间:2018-12-02 18:26:43

标签: android firebase firebase-realtime-database

我有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 :(得分:1)

  

我怎么总是每秒检查人的状态?

无需重复轮询。当您调用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);
             }
         }