Как я могу загрузить больше сообщений и при этом сохранить прослушиватель для прослушивания новых сообщений? - PullRequest
1 голос
/ 04 июня 2019

Я создаю чат для приложения, используя базу данных Firebase в реальном времени.Все хорошо, прежде чем я хочу добавить функцию «загрузить больше».В настоящее время я получаю новейшее сообщение (если кто-то отправляет сообщение) по dbReference.child(childPath).addChildEventListener(childEventListener);.Этот способ поможет получать новейшие сообщения через func onChildAdded, но он также получает все сообщения в дочернем элементе.

Короче говоря, я хочу, чтобы активность чата приложения позволяла получать несколько старых сообщений при запуске Activity или при прокрутке вверх и прослушивать событие с новыми сообщениями.У вас есть способ решить это дело?Ниже приведен код, который я использую для загрузки новейших сообщений, но он также извлекает все сообщения в разговоре, когда я начинаю деятельность.

This is db structure

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

        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...