2017-04-13 7 views
0

私のAndroidアプリ私はFirebaseDatabseを使ってチャットアプリケーションを作成しています。データの構造は次のとおりです。FirebaseDatabaseでチャットオーバービューを作成してデータベース全体をロードしない方法

"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)

にロードしかし、私が今したいことは作ることですa ChatOverviewFragment。それは、WhatsAppのように、データベース内の会話がある各ユーザの最新のメッセージのみを表示します。 FirebaseRecyclerAdapterを使用すると、データベース全体がすべての会話のすべてのメッセージ内でダウンロードされなければならないことを意味します。

すべてのユーザーの最初のメッセージをフィルタリングするより良い方法はありませんアクティブユーザーは会話中ですか?特に私はそれをFirebaseRecyclerAdapterにロードする方法を知りません。 THX :)うまく

答えて

0

、私が正しくあなたがメッセージ

のIDを作成するには()プッシュを使用している場合は、仕事をすることができ、多分 limitToLast方法、を求めPARAMとして1を使用しているものを理解していれば
+0

に​​を変更するには、その結果だけの数に制限はありません - 私はしたくないでしょうか? – softwaresupply

1

あなたがしなければならないことは、あなたのニーズを満たすためにDB構造を適合させることです。私がやることは、各ユーザーが受け取った最新のメッセージを含むノードを作成することです。 「役に立たない」冗長性を減らし、データの破損を避けるために、私はあなたが構築し、今まで私たちと共有していたものを変更します。

"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

関連する問題