Android 文本框问题

Android 文本框问题,android,Android,我有以下代码: 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; priv

我有以下代码:

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");
        }
    }
}
公共类聊天室扩展应用程序活动{
私人按钮btn\u发送消息;
私人编辑文本输入信息;
私人文本查看聊天室会话;
私有字符串用户名、房间名称;
私有数据库引用根;
私有字符串临时密钥;
私有字符串str;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局聊天室);
btn_send_msg=(按钮)findviewbyd(R.id.button13);
输入_msg=(EditText)findViewById(R.id.editText3);
chat_conversation=(TextView)findViewById(R.id.textView4);
user_name=getIntent().getExtras().get(“user_name”).toString();
房间名称=getIntent().getExtras().get(“房间名称”).toString();
setTitle(“聊天室-”+聊天室名称);
root=FirebaseDatabase.getInstance().getReference().child(文件室名称);
str=input_msg.getText().toString().trim();
btn_send_msg.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(str!=null&!str.isEmpty()){
Map Map=newhashmap();
temp_key=root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root=root.child(临时密钥);
Map map2=新的HashMap();
map2.put(“名称”,用户名);
put(“msg”,input_msg.getText().toString());
message_root.updateChildren(map2);
输入_msg.setText(“”);
}否则{
///向用户显示错误消息
Toast.makeText(聊天室,这是“请输入消息”,Toast.LENGTH.show();
}
}
});
root.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
私有字符串chat\u msg,chat\u用户名;
私有void追加会话(DataSnapshot DataSnapshot){
迭代器i=dataSnapshot.getChildren().Iterator();
while(i.hasNext()){
chat_msg=(String)((DataSnapshot)i.next()).getValue();
chat_user_name=(字符串)((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name+“-”+chat_msg+“\n”);
}
}
}
当用户没有在文本框中键入文本时,我试图输出一个错误,但在文本框中,它仍然发送错误消息。
因此,基本上,我能够创建我想要的错误,这样当在聊天室中按下按钮发送空白消息时,它会以错误响应。但是,即使我在文本框中键入某个内容并尝试发送它,它也会以相同的错误进行响应,而不会发送消息。所以请你帮忙

您不应该在点击
按钮时阅读
编辑文本
?你正在做
onCreate()
Activity
。我怀疑在App/Activity启动时已经在那里写了什么东西。因此,一旦您点击SEND,它将不会存储任何文本。。因为您的
str
将为
null
。因此onCreate()在
EditText
中没有任何内容可存储在
str

即使你后来写了一些东西,你也不想得到那篇文章


尝试移动
str=input_msg.getText().toString().trim()str
是否为空之前,
进入
onButtonClick()

您是否应该阅读
按钮上的
编辑文本
点击?你正在做
onCreate()
Activity
。我怀疑在App/Activity启动时已经在那里写了什么东西。因此,一旦您点击SEND,它将不会存储任何文本。。因为您的
str
将为
null
。因此onCreate()在
EditText
中没有任何内容可存储在
str

即使你后来写了一些东西,你也不想得到那篇文章


尝试移动
str=input_msg.getText().toString().trim()str
是否为空之前,
into
onButtonClick()

如上所述,您的
字符串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();
        }

    }
});
btn\u send\u msg.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图){

str=input_msg.getText().toString().trim();//如上所述,您的
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();
        }

    }
});
btn\u send\u msg.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图){

str=input_msg.getText().toString().trim();//我通常对android不太了解,但您只在onCreate方法中设置str的值。不应该
str=input_msg.getText().toString().trim();
在你的onClick方法中,让它每次点击都能读取字符串,而不是在创建时只读取一次?@911dibush我想我在回答中提供了相同的信息。我通常对android不太了解,但你只在onCreate方法中设置str的值。不应该
str=input\u msg.getText().toString().trim();
在onClick方法中,以便