我正在使用Firebase实时数据库建立应用聊天。在我要添加“加载更多”功能之前,一切正常。目前,我收到dbReference.child(childPath).addChildEventListener(childEventListener);
发出的最新消息(如果有人发送消息)。这种方式将有助于通过功能onChildAdded
获取最新消息,但也可以在子级中获取所有消息。
简而言之,我希望应用程序的聊天活动在启动“活动”时或在滚动到顶部时能够获得许多旧消息,并用新消息收听事件。您有办法解决这种情况吗?下面是我用来加载最新消息的代码,但是当我开始活动时,它也会检索对话中的所有消息。
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) {
}
});
}