2017-04-13 11 views
0

我的Android應用程序我正在使用FirebaseDatabse來編寫聊天應用程序。數據的結構是:如何使用FirebaseDatabase創建ChatOverViiew查詢不加載全部數據庫

"message": { 
    "user1_guid": { 
     "user2_guid": { 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      ... 
     }, 
     "user_n_guid": { 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      ... 
     }, 
    }, 
    "user2_guid": { 
     "user1_guid": { 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      ... 
     }, 
     "user_n_guid": { 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      "messageGuid": <MessageObject> , 
      ... 
     }, 
    } 
} 

要裝入USER1的聊天細節我可以這樣做:

final DatabaseReference lDatabaseReference = lDatabase 
     .child("message") 
     .child(sender) 
     .child(mChatPartnerGuid); 

並將其加載到一個FirebaseRecyclerAdapter(MessageData,ChatDetailsAdapter.MessageViewHolder)

但我現在想的是使一個ChatOverviewFragment。它只會顯示每個用戶在數據庫中有對話的最新消息(就像在WhatsApp中一樣)。使用FirebaseRecyclerAdapter意味着整個數據庫必須在可能存在的所有對話的所有消息中下載...

是不是有更好的方式來執行只針對每個用戶的第一條消息進行過濾的查詢活動用戶正在與對話?尤其是我不知道如何將它加載到FirebaseRecyclerAdapter中。 THX :)

回答

0

很好,如果我理解正確你問什麼,也許是limitToLast方法,使用1作爲PARAM,可以做的工作,如果你使用的push()創建的消息

IDS
+0

不只是限制結果的數量 - 我不想? – softwaresupply

1

你需要做的是調整你的數據庫結構,使其滿足你的需求。我要做的是創建一個節點,其中包含每個用戶收到的最新消息。爲了減少「無用的」冗餘並避免損壞的數據,我會改變你建立並與我們分享的內容。

"messages": { 
    "messageId": { 
     "text": string, 
     "date": long, 
     "sender": string, 
     "receiver": string 
    } 
}, 
"last-messages": { 
    "userReceiver": { 
     "sender1": messageId, 
     "sender2": messageId, 
     [...] 
    }, 
    [...] 
} 

,如果你想要求對它們進行排序,只是改變​​到"sender1": { "messageId": messageId", "date":long}

+0

這意味着冗餘數據,但只要沒有合適的方法來創建RecyclerAdapter,我就這樣做 – softwaresupply

相關問題