2017-09-21 102 views
0

我有一個聊天應用程序,當用戶點擊其他用戶的個人資料,我做一個檢查,如果聊天已與此用戶使用下面的代碼存在來篩選火力地堡數據庫值:無法使用查詢

FirebaseUser fu = FirebaseAuth.getInstance().getCurrentUser(); 
    String fuId = fu.getUid(); 
    DatabaseReference queryRef = FirebaseDatabase.getInstance().getReference(); 
    Query query = queryRef.child("chats").child(fuId).orderByChild("otherUsersName").equalTo("Tim Cook"); 

    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()){ 
       //open the exsiting chat 
      }else{ 
       //start a new chat 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

這裏是我的數據庫快照:

enter image description here

既然有一個名爲「蒂姆·庫克」,我點擊蒂姆·庫克的個人價值,就應該打開現有的聊天活動,但每次新的聊天活動開啓和我的查詢不起作用roperly。我想知道我在做什麼錯誤,這也是一種好技術,還是應該以另一種方式處理? 在此先感謝。

回答

0

這不工作,因爲你失蹤了一個孩子。正如我在屏幕截圖中看到的,chatId丟失。爲了解決這個問題,請更改下面這行代碼:

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 
String uid = firebaseUser.getUid(); 

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userIdRef = rootRef.child("chats").child(uid); 
Query query = userIdRef.orderByChild("otherUsersName").equalTo("Tim Cook"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      if (ds.exists()) { 
       Log.d("TAG", ds.child("otherUsersName").getValue(String.class)); 
       //open the exsiting chat 
      } else { 
       //start a new chat 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
query.addListenerForSingleValueEvent(eventListener); 
+0

但是因爲可以有很多用戶聊天,所以我不知道chatId是什麼。我需要從所有聊天中搜索並找到一個匹配。 –

+0

我明白了。請看我更新的答案。 –

+1

嘿,謝謝你的回答。我仍然有一個問題。如果某個用戶有很多聊天記錄,這段代碼是否會變得緩慢,這是最好的方法嗎? –