Android 嘿,我';我正在创建聊天应用程序,但检索消息时出现问题
嘿,我正在创建一个聊天应用程序,我将消息存储在firebase数据库中,类似地,我从中检索。我的问题是在检索消息时 为此,我使用附加值事件侦听器。我所做的是:Android 嘿,我';我正在创建聊天应用程序,但检索消息时出现问题,android,firebase-realtime-database,chat,Android,Firebase Realtime Database,Chat,嘿,我正在创建一个聊天应用程序,我将消息存储在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文件或至少一个屏幕截图。此外,如果你考虑在某个时间点尝试使用,在这里你可以找到一个关于如何创建完整和功能的教程。请加入我的聊天室,我会帮助你,我相信这会得到所有的数据<代码>数据库。你的问题是不完整的,必须做些什么来避免这种情况