В настоящее время я работаю над приложением Firebase chat. Я загрузил демо и попытался его заполнить (http://myapptemplates.com/simple-android-chat-app-tutorial-firebase-integration/)Firebase Android Chat Realtime Функциональность не работает
Я смог отправлять и получать сообщения, но проблема в том, что я должен фактически выйти из чата и загрузить его снова, чтобы увидеть новые сообщения. Другое дело, что все зарегистрированные пользователи отправляют и получают одни и те же сообщения, а не только получатели и отправители. Я новичок в Firebase, поэтому мне действительно трудно это исправить.
Вот sendMessage()
функция:
private void sendMessage() {
if (txt.length() == 0)
return;
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(txt.getWindowToken(), 0);
String s = txt.getText().toString();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user != null) {
final Conversation conversation = new Conversation(s,
Calendar.getInstance().getTime(),
user.getUid(),
buddy.getId(),
"");
conversation.setStatus(Conversation.STATUS_SENDING);
convList.add(conversation);
final String key = FirebaseDatabase.getInstance()
.getReference("messages")
.push().getKey();
FirebaseDatabase.getInstance().getReference("messages").child(key)
.setValue(conversation)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
convList.get(convList.indexOf(conversation)).setStatus(Conversation.STATUS_SENT);
} else {
convList.get(convList.indexOf(conversation)).setStatus(Conversation.STATUS_FAILED);
}
FirebaseDatabase.getInstance()
.getReference("messages")
.child(key).setValue(convList.get(convList.indexOf(conversation)))
.addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
adp.notifyDataSetChanged();
}
});
}
}
);
}
adp.notifyDataSetChanged();
txt.setText(null);
}
Вот loadConversationList()
FirebaseDatabase.getInstance(). getReference("messages").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user != null) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Conversation conversation = ds.getValue(Conversation.class);
if ((conversation.getReceiver().contentEquals(user.getUid()) && conversation.getSender().contentEquals(buddy.getId()))
|| (conversation.getSender().contentEquals(user.getUid()) && (conversation.getReceiver().contentEquals(buddy.getId())))) {
convList.add(conversation);
if (lastMsgDate == null
|| lastMsgDate.before(conversation.getDate()))
lastMsgDate = conversation.getDate();
adp.notifyDataSetChanged();
}
}
}
}