我有以下代码:
public class Chat_Room extends AppCompatActivity {
private Button btn_send_msg;
private EditText input_msg;
private TextView chat_conversation;
private String user_name,room_name;
private DatabaseReference root;
private String temp_key;
private String str;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_room);
btn_send_msg = (Button) findViewById(R.id.button13);
input_msg = (EditText) findViewById(R.id.editText3);
chat_conversation = (TextView) findViewById(R.id.textView4);
user_name = getIntent().getExtras().get("user_name").toString();
room_name = getIntent().getExtras().get("room_name").toString();
setTitle("Chat Room - " + room_name);
root = FirebaseDatabase.getInstance().getReference().child(room_name);
str=input_msg.getText().toString().trim();
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(str != null && !str.isEmpty()){
Map<String, Object> map = new HashMap<String, Object>();
temp_key = root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root = root.child(temp_key);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("name", user_name);
map2.put("msg", input_msg.getText().toString());
message_root.updateChildren(map2);
input_msg.setText("");
}else{
/// show the error msg to the user
Toast.makeText(Chat_Room.this, "Please enter the message",Toast.LENGTH_LONG).show();
}
}
});
root.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private String chat_msg,chat_user_name;
private void append_chat_conversation(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
chat_msg = (String) ((DataSnapshot)i.next()).getValue();
chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name + " - " + chat_msg + "\n");
}
}
}
我试图在用户没有在文本框中键入文本时输出错误,但是文本中包含文本,它仍然会发送错误消息。 所以基本上,我能够创建我想要的错误,以便当在聊天室中按下按钮发送空白消息时,它会响应错误。但是,即使我在文本框中键入内容并尝试发送它,它也会响应相同的错误并且不发送消息。所以,请你帮忙!
答案 0 :(得分:2)
您是否应该在EditText
点击时查看Button
?你正在onCreate()
Activity
这样做..我怀疑在应用/启动Activity时已经写了一些内容。因此,一旦您点按SEND,它就不会存储任何文字。因为您的str
将是null
..因此onCreate()EditText
中没有任何内容存储在{ {1}}。
即使你后来写了一些内容,你也不会试图获得该文本。
在检查str
是否为空之前,尝试将str=input_msg.getText().toString().trim();
移至onButtonClick()
。
答案 1 :(得分:0)
如上所述,您的String str
为空。在OnClick
事件中使用:
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
str=input_msg.getText().toString().trim(); // <--- here
if(!TextUtils.isEmpty(username)){
Map<String, Object> map = new HashMap<String, Object>();
temp_key = root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root = root.child(temp_key);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("name", user_name);
map2.put("msg", input_msg.getText().toString());
message_root.updateChildren(map2);
input_msg.setText("");
}else{
/// show the error msg to the user
Toast.makeText(Chat_Room.this, "Please enter the message",Toast.LENGTH_LONG).show();
}
}
});