Я разрабатываю простое приложение для чата basi c с использованием базы данных firebase в реальном времени, и я все спроектировал хорошо, однако у меня возникла одна проблема со светом. Мои чаты продолжают дублировать себя на странице входящих сообщений (страница, на которой чаты расположены для того, чтобы пользователь мог выбрать, какой чат он хочет открыть и начать разговор).
Я прикрепил изображение того, что я имею в виду ниже. Скриншот экрана телефона
Код, который я использую для получения чатов и отображения их в представлении ресайклера, приведен ниже. У меня есть каталог под названием Conversations в моей БД, в котором хранится идентификатор пользователя, и под ним находится дочерний элемент каждого человека, с которым он разговаривает, под которым находится последнее сообщение и видное логическое значение.
Структура базы данных
Ниже приведен код
convoref = FirebaseDatabase.getInstance().getReference().child("Conversations").child(currentUid);
а затем ..
public void getConvoIds() {
convoref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for(DataSnapshot convo : dataSnapshot.getChildren()){
boolean isMessageSeen = false;
String lastMessage = "";
if(convo.child("seen").getValue() != null) {
isMessageSeen = (boolean) convo.child("seen").getValue();
}else{
Log.i("nolastseen", "location is null");
}
if(convo.child("lastMessage").getValue() != null) {
lastMessage = convo.child("lastMessage").getValue().toString();
}else{
Log.i("nolastMessage", "location is null");
}
Log.i ("the_convo_partner_key", convo.getKey());
Log.i ("lastseenmessage", lastMessage);
Log.i ("seenstate", String.valueOf(isMessageSeen));
FetchConvoInfo(convo.getKey(), isMessageSeen, lastMessage );
}
}
}
конво выборки информация functuion ниже
public void FetchConvoInfo(final String key, final boolean isMessageSeen, final String lastMessage){
FirebaseDatabase.getInstance().getReference().child("Users").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
boolean chatExists = false;
String username = "";
String thumbnail = "";
String chatPartner;
chatPartner = key;
if(dataSnapshot.child("username").exists()){
username = dataSnapshot.child("username").getValue().toString();
}
if(dataSnapshot.child("thumbnail").exists()){
thumbnail = dataSnapshot.child("thumbnail").getValue().toString();
}
ConvoClass obj= new ConvoClass(chatPartner, username, thumbnail, isMessageSeen, lastMessage);
resultConvos.add(obj);
mConvoAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Любая помощь будет принята с благодарностью. Кажется, я не могу понять, почему чат дублируется.