Мой matchesObject
имеет логическое значение, независимо от того, является ли отображаемый чат непрочитанным или нет, я хочу обновлять представление recycler каждый раз, когда приходит новое сообщение, и оно не читается, вместо того, чтобы делать это только один раз, когда приложение запускается в первый раз.
Я также вызываю getUserMatchId()
в моем методе oncreate()
.
Я думаю о вызове getUserMatchId()
в моем методе getUnread()
, но это приведет к тому, что приложение войдет в бесконечный цикл.
Изображение моей базы данных прилагается к вопросу.поэтому, в основном, при каждом новом сообщении, отправляемом пользователем другому пользователю, к которому у него есть соединение, он добавляет идентификатор противоположного пользователя в непрочитанный узел узла chatId.
private void getUserMatchId() {
DatabaseReference matchDb = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId).child("connections").child("matches");
matchDb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot match : dataSnapshot.getChildren()) {
FetchMatchInformation(match.getKey());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void FetchMatchInformation(final String key) {
DatabaseReference userDb = FirebaseDatabase.getInstance().getReference().child("Users").child(key);
userDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getKey()!= currentUserId) {
String userId = dataSnapshot.getKey();
String name = "";
String profileImageUrl = "";
String notificationKey = "";
getChatId(dataSnapshot, key);
getUnread();
if (dataSnapshot.child("name").getValue() != null) {
name = dataSnapshot.child("name").getValue().toString();
}
if (dataSnapshot.child("profileImageUrl").getValue() != null) {
profileImageUrl = dataSnapshot.child("profileImageUrl").getValue().toString();
}if (dataSnapshot.child("notificationKey").getValue() != null) {
notificationKey = dataSnapshot.child("notificationKey").getValue().toString();
}
MatchesObject obj = new MatchesObject(userId, name, profileImageUrl, notificationKey, unRead);
resultMatches.add(obj);
mMatchesAdapter.notifyDataSetChanged();
nestedScrollView.postDelayed(new Runnable() {
@Override
public void run() {
//replace this line to scroll up or down
nestedScrollView.fullScroll(ScrollView.FOCUS_UP);
}
}, 100L);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void getChatId(DataSnapshot userDb, String key) {
mChatId = userDb.child("connections").child("matches").child(key).child("ChatId").getValue().toString();
getUnread();
}
private void getUnread(){
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Chat").child(mChatId).child("Unread");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.exists() && dataSnapshot.getValue().toString() == FirebaseAuth.getInstance().getCurrentUser().toString()){
unRead = true;
}else{
unRead = false;
}
}
@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) {
}
});
}
введите описание изображения здесь