我正在尝试从数据库中获取最近添加的消息。但是,每当我获取这些消息时,所有消息都会显示在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 -
答案 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);