0
我目前正在開發Firebase聊天應用程序。我下載了一個演示並試圖完成它(http://myapptemplates.com/simple-android-chat-app-tutorial-firebase-integration/)Firebase Android聊天實時功能不工作
我能夠發送和接收消息,但問題是我必須實際退出聊天箱並再次加載才能看到新消息。另一件事是所有註冊用戶都發送和接收相同的消息,而不是隻有一個收件人和發件人。我是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();
}
}
}
}