как получить только недавно добавленное сообщение в базе данных Firebase в Android - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь получить недавно добавленные сообщения из базы данных.Но всякий раз, когда я получаю эти сообщения, все сообщения отображаются в программе просмотра.Я просто хочу показать недавно добавленные сообщения.// Вот мой код -

mFirebaseDatabase = FirebaseDatabase.getInstance();
        mDbReference = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference uidRef = mDbReference.child("users").child(currentUser).
                child(selectedUser).child(ChatMessageModel.MSG_TYPE_RECEIVED);
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    ChatMessageModel chatMessageModel = ds.getValue(ChatMessageModel.class);
                    messageList.add(chatMessageModel);
                }
                chatAppMsgAdapter.notifyDataSetChanged();
                mRecyclerview.setAdapter(chatAppMsgAdapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d(TAG, "onCancelled: ");
            }

        };
        uidRef.addValueEventListener(valueEventListener);




     //here output like this - 

введите описание изображения здесь

1 Ответ

0 голосов
/ 27 сентября 2018

Редактировать: добавлены пояснения

Используя ссылку в uidRef, вы извлекаете все данные в этом узле пути Firebase.

Чтобы получить последние данные, добавленные к этому узлу в базе данных, вы должны добавить метод .limitToLast (1).

Проверка Запрос Firebase - limitToLast ()

Кроме того, поскольку вы извлекаете только один элемент данных, вам не нужно выполнять итерацию, поэтому удаление цикла forEach.

mFirebaseDatabase = FirebaseDatabase.getInstance();
                    mDbReference = FirebaseDatabase.getInstance().getReference();
                    final DatabaseReference uidRef = mDbReference.child("users").child(currentUser).
                            child(selectedUser).child(ChatMessageModel.MSG_TYPE_RECEIVED);
                    ValueEventListener valueEventListener = new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            ChatMessageModel chatMessageModel = ds.getValue(ChatMessageModel.class);
                            messageList.add(chatMessageModel);
                            chatAppMsgAdapter.notifyDataSetChanged();
                            mRecyclerview.setAdapter(chatAppMsgAdapter);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            Log.d(TAG, "onCancelled: ");
                        }

                    };
                    // Add the .limitToLast(1) query function or replace with the
                    // limitToFirst(1) if .limitToLast(1) didn't work
                    uidRef.limitToLast(1).addValueEventListener(valueEventListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...