2017-03-29 7 views
0

私はアプリケーションが初めてチャットが正常に動作し、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()); 
     } 
    }); 

} 

からメッセージを取得するコードです。

答えて

0

この問題の最も簡単な解決策は、ユーザーuuidを昇順または降順で並べることによってチャットルームを作成することです。

public String getChatRoom(String fromUserId,String toMessageId){ 

      String chatRoom; 

      if(fromUserId.compareTo(toMessageId) < 0){ 
       // ToMessageId has less alphabetic order then fromUserId 
       chatRoom = toMessageId+" "+fromUserId; 
      }else{ 
       chatRoom = fromUserId+" "+toMessageId; 
      } 
      return chatRoom; 
} 

Here firebaseチャットアプリ

のサンプル実装です
関連する問題