java - Firebase 仍在一对一聊天应用程序中创建两个房间

标签 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!

我花了很多时间编码,但我看不出问题出在哪里,但似乎就在这一部分。重点是,当我试图进入那个已经做好的房间时,一切都很好。但在上图中,我希望将这两个房间合二为一。

顺便说一句,这是第一篇文章,耶!

最佳答案

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

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

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

而且,我认为最后一个 else 应该足够“else”,而不是“else if”

我不知道检查 child 是否存在的性能是否快。 但作为一名优秀的开发人员(并且为了省钱..呵呵),我们应该尽量减少不必要的数据库连接。

关于java - Firebase 仍在一对一聊天应用程序中创建两个房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564774/

相关文章:

java - 如何在不覆盖的情况下向 Firebase Firestore 添加值?

javascript - 在生产 Firebase 函数中公开垃圾收集(例如 --expose-gc)

java - 使用 DefaultHttpResponseWriter 编写实体

android - MediaPlayer无法创建

java - 如何在 wicket 1.4 中编写 bean 自动完成?

android - 如何将检测测试和单元测试源集添加到现有的 Android Studio 项目

android - 在我选择选项卡之前加载进度条

swift - 如何使用 Swift 获取 Firebase 中一个子项的所有数据

java - "Reverse"解析日期错误

java -\t 与 Java 中的间距不一致