2016-07-26 186 views
0

我有點困惑創建一對一的firbase聊天應用程序。Firebase一對一聊天android

我的要求是我需要顯示每個用戶的聊天列表(用戶聊天記錄)。一旦用戶從列表中單擊一個用戶,我想顯示與選定用戶的一對一聊天窗口。

但我的格式,當我將消息發送到任何用戶的所有用戶得到了消息,我不能顯示特定用戶過濾聊天列表中顯示它的所有聊天記錄,從火力數據庫

這是我的JSON strucure在火力

enter image description here

Java代碼

static final String CHAT_REFERENCE = "lifegoal"; 

ChatFirebaseAdapter firebaseAdapter = new ChatFirebaseAdapter(mFirebaseDatabaseReference.child(CHAT_REFERENCE), userModel.getName(), this); 
    rvListMessage.setLayoutManager(mLinearLayoutManager); 
    rvListMessage.setAdapter(firebaseAdapter); 

回答

-1

我認爲你的數據保存格式是錯誤的。您正在以全線程發送消息,例如lifegoal,您需要將其發送到存儲單個用戶轉換的單個線程。看看這些鏈接

Firebase : Build a real time chat
Firebase Chat for Android
bonfire-firebase-sample

上述鏈接將演示如何火力聊天的作品,你應該遵循什麼樣的DataModel的。

Here他們表現出的數據結構,你可以遵循

+1

,但如果我將其存儲在單個線程浩我可以訪問它了特定的孩子 – Tufan

3

首先,你必須改變你的數據庫結構的方式,讓你可以爲每個一對一聊天一個新的線程或對話id 。例如,你可以嘗試這樣的事:

- lifegoal 
    - senderId-receiverId 
     - KNa0... 
      - message 
      - timestamp 
      + usermodel 

這將允許您創建一個新的threadId獨特的兩個用戶。

唯一需要注意的是,您需要檢查哪個孩子在firebase中有效,才能知道使用哪個孩子。舉例來說,你可以嘗試這樣的事:

String type_1 = senderId + "_" + receiverId; String type_2 = receiverId + "_" + senderId;

,然後檢查你的onDataChange()回調象下面這樣:

`@Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.hasChild(type_1)) { 
      // do something... 
     } else if (dataSnapshot.hasChild(type_2)) { 
      // do something... 
     } else { 
      // do something... 
     } 
    }`