我在 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 新手。
这是数据库的外观:
我花了很多时间编码,但我看不出问题出在哪里,但似乎就在这一部分。重点是,当我试图进入那个已经做好的房间时,一切都很好。但在上图中,我希望将这两个房间合二为一。
顺便说一句,这是第一篇文章,耶!
最佳答案
为什么不创建一个模式来创建房间名称?例如:
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/