在FirebaseRecyclerAdapter中添加了onChild

时间:2018-11-19 19:32:21

标签: java android database firebase firebase-realtime-database

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

1 个答案:

答案 0 :(得分:0)

Firebase执行所谓的状态同步:它同步您侦听的数据。要仅获取新数据,您只需要侦听新数据。

一种方法是通过具有时间戳和每个项目,并在附加侦听器之后查询带有时间戳的项目。

另一种方法是只限制最后一项。

但是两者也会影响您显示的消息。

另请参阅: