Java 在Firebase聊天中加载固定数量的过滤消息

Java 在Firebase聊天中加载固定数量的过滤消息,java,firebase,firebase-realtime-database,Java,Firebase,Firebase Realtime Database,需要firebase的帮助。我阅读了文档和其他主题,但找不到正确的解决方案。我有一个带有消息列表的聊天页面。我想将加载的消息数量限制为50条(因此我使用.limitToLast(50))。问题是,我想让我的用户能够在聊天中向粗鲁的人隐藏信息。他们的消息被删除,代码工作,但加载的消息数变为50-(已删除消息数)。我想将加载的“正常”消息数量修正为50条,即使前面有1000条“坏”消息。我怎样才能做到这一点?谢谢 mDatabase = FirebaseDatabase.getInstance(

需要firebase的帮助。我阅读了文档和其他主题,但找不到正确的解决方案。我有一个带有消息列表的聊天页面。我想将加载的消息数量限制为50条(因此我使用.limitToLast(50))。问题是,我想让我的用户能够在聊天中向粗鲁的人隐藏信息。他们的消息被删除,代码工作,但加载的消息数变为50-(已删除消息数)。我想将加载的“正常”消息数量修正为50条,即使前面有1000条“坏”消息。我怎样才能做到这一点?谢谢

  mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid).child("blocked");
  listener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                final Message new_message = dataSnapshot.getValue(Message.class);
                final String rude_message_userId = new_message.getUserID();
                mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot snapshot) {
                        if (snapshot.hasChild(rude_message_userId)) {messageList.remove(new_message);}
                    }
                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                    }
                });
                messageList.add(new_message);
            }
            @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) {}
        };

        
            query = FirebaseDatabase.getInstance().getReference().child("the_messages").limitToLast(50);
            query.addChildEventListener(listener);

在if语句中添加一个计数器来检查粗鲁的消息怎么样:

       mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid).child("blocked");
int counter = 0;
      listener = new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    final Message new_message = dataSnapshot.getValue(Message.class);
                    final String rude_message_userId = new_message.getUserID();
                    mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot snapshot) {
                            if (snapshot.hasChild(rude_message_userId)) {messageList.remove(new_message); counter++;}
                    }
然后为查询设置onCompletionListener,并再次将查询限制为计数器变量:

    query.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task){
query2 = FirebaseDatabase.getInstance().getReference().child("the_messages").limitToLast(counter);
query2.get();
counter =0;
query.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
query2=FirebaseDatabase.getInstance().getReference().child(“the_messages”).limitToLast(计数器);
query2.get();
计数器=0;

Trevor,谢谢你的回复!我尝试过一些方法,但问题是,如果有10条坏消息,第二个范围将是60条,并且在60-50条消息中有一种可能会有坏消息,这使得我们进行第三次查询,也许是第四次查询……这似乎对互联网流量不是很好,导致所有用户在任何时候的查询量。。。