0
現在、Firebaseチャットアプリケーションを開発中です。デモをダウンロードして完了しようとしました(http://myapptemplates.com/simple-android-chat-app-tutorial-firebase-integration/)Firebase Androidチャットリアルタイム機能が動作しない
メッセージを送受信できましたが、実際にチャットボックスを終了して新しいメッセージを表示するために再度読み込む必要があります。もう1つのことは、登録されたすべてのユーザーが、1人の受信者と送信者ではなく、同じメッセージを送受信することです。私は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);
}
ここでは、あなたがSingleValueListener
を追加しました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();
}
}
}
}