mMessages
是一种方法。我有一个SQLite表,每次收到新消息时,我都想将+1添加到列中。这就是mMessages()
方法的作用,但是并不是每次添加一个新孩子都添加+1,而是每次我打开活动时它都会添加所有现有孩子。
说,表中的支持为10,并且我在RecyclerView
中有5个孩子,我将其打开,在我收到一个新孩子之前,该表被添加了+5,因为有5个孩子现有的孩子。
我不希望发生这种情况,但我希望仅在添加新孩子时才添加+1。我该如何实现?
@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());
final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);
mMessages();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
Firebase执行所谓的状态同步:它同步您侦听的数据。要仅获取新数据,您只需要侦听新数据。
一种方法是通过具有时间戳和每个项目,并在附加侦听器之后查询带有时间戳的项目。
另一种方法是只限制最后一项。
但是两者也会影响您显示的消息。
另请参阅: