0
私は最近、自分のアプリにチャット機能を追加しました。 メッセージとそのタイムスタンプをFirebase database
に保存しています。チャットでメッセージを適切に処理する方法
私は、(現在のチャットルームで)最後の60のメッセージだけを表示する方法を理解しようとしています。これは、limitToLast()
を使用してFirebaseから現在の会話の最後の60項目だけを取得することを意味します。
さらにメッセージアーカイブを処理する適切な方法があります私は60件のメッセージ制限をスワイプによって到達されたときにのみ表示されますLoad more
ボタンを追加したいと思いますし、それは別の60
をロードする必要があります上記のように?
以下のコードを使用して、実際に特定のメッセージアーカイブ全体を取得します。特定のチャットアーカイブに何千ものメッセージがある場合、これは効果がないことがわかります。これを実現するために
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
mMessageAdapter.add(chatMessage);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mDatabaseReference.child("chat_messages").child(chatId).addChildEventListener(mChildEventListener);
startAt()はドキュメントのとおりです: '選択された注文方法に応じて、指定したキーまたは値以上のアイテムを返します.'したがって、私はこれをインデックスとして使用できません。 'limitToFirst'でインデックスの制限を指定することしかできません。これは、ある範囲のインデックスを取得しようとするときにはあまり役に立ちません。間違っていると私を訂正してください –
あなたが話しているインデックスについて私は理解していませんが、初めて会話の60のメッセージを読み込むためにデータベースに問い合わせることができます。 –
'chatId'は' int'ではないので、私はそれに基づいて問い合わせることができません。さらに、 'limitToFirst'と' startAt'を使って、あなたが何を示唆しているかを正しく理解すれば、**最も古い**から**最新の**にメッセージを取得します。私は**最新の**から**最も古い**に取得しようとしています** –