如何仅在Android的Firebase数据库中提取最近添加的消息

时间:2018-09-27 09:33:33

标签: android firebase firebase-realtime-database

我正在尝试从数据库中获取最近添加的消息。但是,每当我获取这些消息时,所有消息都会显示在recyclerview中。我只想显示最近添加的消息。 //这是我的代码-

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 - 

enter image description here

1 个答案:

答案 0 :(得分:0)

  

编辑:添加了说明

通过使用uidRef中的引用,您将检索Firebase路径的该节点中的所有数据。

要检索添加到数据库中该节点的最后一个数据,应添加.limitToLast(1)方法。

选中Firebase Query - 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);