Я создаю чат для приложения, используя базу данных Firebase в реальном времени.Все хорошо, прежде чем я хочу добавить функцию «загрузить больше».В настоящее время я получаю новейшее сообщение (если кто-то отправляет сообщение) по dbReference.child(childPath).addChildEventListener(childEventListener);
.Этот способ поможет получать новейшие сообщения через func onChildAdded
, но он также получает все сообщения в дочернем элементе.
Короче говоря, я хочу, чтобы активность чата приложения позволяла получать несколько старых сообщений при запуске Activity или при прокрутке вверх и прослушивать событие с новыми сообщениями.У вас есть способ решить это дело?Ниже приведен код, который я использую для загрузки новейших сообщений, но он также извлекает все сообщения в разговоре, когда я начинаю деятельность.
private void getConversations() {
dbReference = dbHelper.getDatabaseReference();
String childPath = "/" + FirebaseDatabaseKeyName.CONVERSATIONS.getKeyName()
+ "/" + conversationId
+ "/" + FirebaseDatabaseKeyName.MESSAGES.getKeyName();
dbReference.child(childPath).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Map<String, Object> objectMap = (Map<String, Object>) dataSnapshot.getValue();
Message message = Message.convertObjectMap(objectMap);
if (message != null) {
message.setId(dataSnapshot.getKey());
adapter.addMessage(message);
smoothScrollEnd();
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}