Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android firebase一对一聊天应用程序_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

android firebase一对一聊天应用程序

android firebase一对一聊天应用程序,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我尝试使用mvp开发一对一聊天应用程序 当应用程序第一次运行时,聊天功能正常,消息被发送给用户。 问题是,当我尝试注册另一个帐户并尝试发送消息时,firebase创建了两个不同的聊天室,但我无法获取消息,因为第二个用户没有检测到已创建聊天室并创建了另一个聊天室 你能帮我吗?? 这是我尝试发送消息的代码: 最后一个字符串room_type_1=chat.getSenderUid()+“_”+chat.getReceiveUID(); 最后一个字符串room_type_2=chat.getRecei

我尝试使用mvp开发一对一聊天应用程序 当应用程序第一次运行时,聊天功能正常,消息被发送给用户。 问题是,当我尝试注册另一个帐户并尝试发送消息时,firebase创建了两个不同的聊天室,但我无法获取消息,因为第二个用户没有检测到已创建聊天室并创建了另一个聊天室 你能帮我吗?? 这是我尝试发送消息的代码:

最后一个字符串room_type_1=chat.getSenderUid()+“_”+chat.getReceiveUID(); 最后一个字符串room_type_2=chat.getReceiveUID()+“_”+chat.getSenderUid()

这是我从firebase得到信息的代码

public void getMessageFromFirebaseUser(最终上下文上下文、字符串senderUid、字符串receiverUid、最终ChatFragmentListener ChatFragmentListener){


.

解决此问题的最简单方法是通过按升序或降序排列用户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;
}
公共字符串getChatRoom(从userid到messageid的字符串){
字符串聊天室;
if(从userid.compareTo(到消息ID)<0){
//ToMessageId的字母顺序比fromUserId少
聊天室=toMessageId+“”+fromUserId;
}否则{
聊天室=从用户ID+“”+到消息ID;
}
返回聊天室;
}
是firebase聊天应用程序的示例实现

    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());
        }
    });

}
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;
}