我在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的新手。
以下是数据库的外观:
我花了很多时间编码,我只是看不出问题出在哪里,但似乎是在这一部分。关键是,当我试图进入房间时,没关系,一切都很好。但是在上面的图片中,我希望将这两个房间合为一体。
BTW第一篇帖子,耶!
答案 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);
}