私はアプリケーションが初めてチャットが正常に動作し、messsgesがユーザーに送信されるときにmvp を使用して1対1のチャットアプリケーションを開発しようとします。 問題は、別のアカウントに登録してメッセージを送信しようとしたときです。firebaseは2つの異なるチャットルームを作成し、2番目のユーザーはチャットルームが作成されたことを検出せず、 あなたは私を助けてくれますか? メッセージを送信しようとしているコード:アンドロイドfirebase 1対1のチャットアプリケーション
final String room_type_1 = chat.getSenderUid()+ "_" + chat.getReceiverUid(); final String room_type_2 = chat.getReceiverUid()+ "_" + chat.getSenderUid();
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child(Constants.ARG_CHAT_ROOMS).getRef().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(room_type_1)) {
Log.e(TAG, "sendMessageToFirebaseUser: " + room_type_1 + " exists");
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_1).child(String.valueOf(chat.getTimestamp())).setValue(chat);
} else if (dataSnapshot.hasChild(room_type_2)) {
Log.e(TAG, "sendMessageToFirebaseUser: " + room_type_2 + " exists");
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_2).child(String.valueOf(chat.getTimestamp())).setValue(chat);
} else {
Log.e(TAG, "sendMessageToFirebaseUser: success");
Log.e("sender uis",""+chat.getSenderUid());
Log.e("srevier uis",""+chat.getSenderUid());
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_1).child(String.valueOf(chat.getTimestamp())).setValue(chat);
getMessageFromFirebaseUser(chat.getSenderUid(), chat.getReceiverUid());
}
sendPushNotificationToReceiver(chat.sender,
chat.message,
chat.senderUid,
new SharedPrefUtil(context).getString(Constants.ARG_FIREBASE_TOKEN),
receiverFirebaseToken);
mOnSendMessageListener.onSendMessageSuccess();
}
@Override
public void onCancelled(DatabaseError databaseError) {
mOnSendMessageListener.onSendMessageFailure("Unable to send message: " + databaseError.getMessage());
}
});
}
、これは私が
firebase公共ボイドgetMessageFromFirebaseUser(最終コンテキスト・コンテキスト、文字列senderUid、列receiverUid、最終ChatFragmentListener chatFragmentListener){
final String room_type_1 = senderUid + "_" + receiverUid;
final String room_type_2 = receiverUid + "_" + senderUid;
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
final DatabaseReference databaseChats = FirebaseDatabase.getInstance().getReference().child(Constants.ARG_CHAT_ROOMS);
databaseChats.keepSynced(true);
databaseReference.child(Constants.ARG_CHAT_ROOMS).getRef().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(room_type_1)) {
Log.e(TAG, "getMessageFromFirebaseUser: " + room_type_1 + " exists");
FirebaseDatabase.getInstance()
.getReference()
.child(Constants.ARG_CHAT_ROOMS)
.child(room_type_1).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getKey() != s) {
Chat chat = new Chat();
chat = dataSnapshot.getValue(Chat.class);
chatFragmentListener.onGetMessagesSuccess(chat);
Log.e("1", "get");
}
// do something here
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
/* Log.e("childadded","eeeee"+s);
Log.e("chilchanged","ee"+dataSnapshot.getKey());
Chat chat=dataSnapshot.getValue(Chat.class);
String key=dataSnapshot.getKey();
if(!key.equals(s)){chats.add(chat);}*/
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
/* Log.e("childadded","eeeee"+s);
Log.e("childmoved","ee"+dataSnapshot.getKey());
Chat chat=dataSnapshot.getValue(Chat.class);
String key=dataSnapshot.getKey();
if(key.equals(s)){chats.remove(chat);}*/
}
@Override
public void onCancelled(DatabaseError databaseError) {
// lll
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
} else if (dataSnapshot.hasChild(room_type_2)) {
Log.e(TAG, "getMessageFromFirebaseUser: " + room_type_2 + " exists");
FirebaseDatabase.getInstance()
.getReference()
.child(Constants.ARG_CHAT_ROOMS)
.child(room_type_2).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = new Chat();
chat = dataSnapshot.getValue(Chat.class);
chatFragmentListener.onGetMessagesSuccess(chat);
Log.e("2", "get");
}
@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) {
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
} else {
Log.e(TAG, "getMessageFromFirebaseUser: no such room available");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
}
からメッセージを取得するコードです。