Android 嘿,我';我正在创建聊天应用程序,但检索消息时出现问题

Android 嘿,我';我正在创建聊天应用程序,但检索消息时出现问题,android,firebase-realtime-database,chat,Android,Firebase Realtime Database,Chat,嘿,我正在创建一个聊天应用程序,我将消息存储在firebase数据库中,类似地,我从中检索。我的问题是在检索消息时 为此,我使用附加值事件侦听器。我所做的是: 我将位置放置在数据更改中 我将消息添加到已连接到回收器视图的arraylist中 在将文本显示到recycler视图后,我已从该位置本身删除了该消息 但在此之前,我在ondata change中添加了一个if语句,条件是if(datasnapshot值不是空的),然后执行上述3个步骤。令人惊讶的是,它起作用了 但唯一的问题是,每当我退出他

嘿,我正在创建一个聊天应用程序,我将消息存储在firebase数据库中,类似地,我从中检索。我的问题是在检索消息时

为此,我使用附加值事件侦听器。我所做的是:

  • 我将位置放置在数据更改中
  • 我将消息添加到已连接到回收器视图的arraylist中
  • 在将文本显示到recycler视图后,我已从该位置本身删除了该消息
  • 但在此之前,我在ondata change中添加了一个if语句,条件是if(datasnapshot值不是空的),然后执行上述3个步骤。令人惊讶的是,它起作用了

    但唯一的问题是,每当我退出他/她的聊天活动,与其他人聊天并返回给他时,我会收到他新发送的消息两次显示,当我再次返回时,我会收到他新发送的消息三次显示,因此我不知道该怎么办提前感谢

    我的代码

    
    myfirebase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    mychildtext=dataSnapshot.getValue(String.class);
                    if (!mychildtext.isEmpty())
                    {
                        model d=new model();
                        //Here model is model class "List<model> modelList=new Arraylist()"
                        d.setTextMessage(mychildtext);
                        d.setIsme(false);
                        database.maindao().insert(d);
                        //I use database(RoomDB) and add all those stuff to it
                        modelList.clear();
                        modelList.addAll(database.maindao().getAll());
                        recyclerView.smoothScrollToPosition(modelList.size());
                        customAdapter.notifyDataSetChanged();
                        ref.child(temp).setValue("");
                        modelList.clear();
                        //above is the location of the message and so i clear it
                    }
                }
    
                @Override
                public void onCancelled(FirebaseError firebaseError) {
    
                }
            });
    
    
    myfirebase.addValueEventListener(新的ValueEventListener(){
    @凌驾
    公共void onDataChange(DataSnapshot DataSnapshot){
    mychildtext=dataSnapshot.getValue(String.class);
    如果(!mychildtext.isEmpty())
    {
    模型d=新模型();
    //这里的模型是模型类“List modelList=new Arraylist()”
    d、 setTextMessage(mychildtext);
    d、 setIsme(假);
    database.maindao().insert(d);
    //我使用数据库(RoomDB)并将所有这些内容添加到其中
    modelList.clear();
    modelList.addAll(database.maindao().getAll());
    smoothScrollToPosition(modelList.size());
    customAdapter.notifyDataSetChanged();
    参考子(温度)设置值(“”);
    modelList.clear();
    //上面是消息的位置,因此我将其清除
    }
    }
    @凌驾
    取消后的公共无效(FirebaseError FirebaseError){
    }
    });
    


    之所以会出现重复,是因为适配器具有在第一个eventlistener上获取的先前内容。因此,当它再次激发时,它也将获得所有以前的数据

    手动处理事件侦听器非常麻烦。我能做的就是向您推荐一个名为FirebaseUI的很棒的库。它将为您处理进行消息绑定所需的小细节

    它将处理保持架的更新


    如果要处理事件侦听器,可以使用DiffUtil,它可以帮助您将数据绑定到适配器,并处理重复消息的问题。

    两幅图片都指向您的输出。请将代码添加为文本,而不是图像。请把你的数据库结构添加为JSON文件或至少一个屏幕截图。此外,如果你考虑在某个时间点尝试使用,在这里你可以找到一个关于如何创建完整和功能的教程。请加入我的聊天室,我会帮助你,我相信这会得到所有的数据<代码>数据库。你的问题是不完整的,必须做些什么来避免这种情况