我有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");
}
}
}
答案 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);
}
}