Firebase仍然在一对一聊天应用中制作两个房间

时间:2017-04-22 21:23:31

标签: java android firebase firebase-realtime-database

我在Android上的聊天应用程序有问题。这是我的代码,我正在创造空间。

public void goToChat(View view) {
        databaseReference = FirebaseDatabase.getInstance().getReference();

        final Map<String,Object> map = new HashMap<String, Object>();
        final String sender = senderName.getText().toString().trim();
        final String receiver = receiverName.getText().toString().trim();
        final String room_name_1 = sender + "_" + receiver;
        final String room_name_2 = receiver + "_" + sender;

        map.put(room_name_1,"");
        System.out.println(room_name_1);
        System.out.println(room_name_2);

        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.hasChild(room_name_1))
                {
                    System.out.println("ROOM1");
                    Intent intent = new Intent(MainActivity.this, Chat.class);
                    intent.putExtra("Room_name", room_name_1);
                    startActivity(intent);
                }
                else if(dataSnapshot.hasChild(room_name_2))
                {
                    System.out.println("ROOM2");
                    Intent intent = new Intent(MainActivity.this, Chat.class);
                    intent.putExtra("Room_name",room_name_1);
                    startActivity(intent);
                }
                else if((dataSnapshot.hasChild(room_name_1) == false) && (dataSnapshot.hasChild(room_name_2) == false))
                {
                    System.out.println("ROOM3");
                    databaseReference.updateChildren(map);
                    Intent intent = new Intent(MainActivity.this, Chat.class);
                    intent.putExtra("Room_name",room_name_1);
                    startActivity(intent);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

我知道它可能看起来更好,但我是android的新手。

以下是数据库的外观:

click!

我花了很多时间编码,我只是看不出问题出在哪里,但似乎是在这一部分。关键是,当我试图进入房间时,没关系,一切都很好。但是在上面的图片中,我希望将这两个房间合为一体。

BTW第一篇帖子,耶!

2 个答案:

答案 0 :(得分:2)

为什么不创建一个模式来创建房间名称?例如:

if(sender.compareTo(receiver)<0)
    room_name = sender + "_" + receiver;
else
    room_name = receiver + "_" + sender;

因此,我们只需要检查单个节点是否存在。

另外,我认为最后的其他内容应该足够了&#34;否则&#34;只有&#34;否则如果&#34;

我不知道检查孩子是否存在的表现很快。 但作为一个优秀的开发人员(为了省钱......呵呵),我们应该尽量减少不必要的数据库连接。

答案 1 :(得分:0)

解决:

if (dataSnapshot.hasChild(room_name_1))
                {
                    System.out.println("ROOM1");
                    Intent intent = new Intent(MainActivity.this, Chat.class);
                    intent.putExtra("Room_name", room_name_1);
                    startActivity(intent);
                }
                else if(dataSnapshot.hasChild(room_name_2))
                {
                    System.out.println("ROOM2");
                    Intent intent = new Intent(MainActivity.this, Chat.class);
                    /*
                     Now is okay...
                    */
                    intent.putExtra("Room_name",room_name_2);   
                    startActivity(intent);
                }