TextBox问题

时间:2017-01-12 16:08:47

标签: 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;
    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");
        }
    }
}

我试图在用户没有在文本框中键入文本时输出错误,但是文本中包含文本,它仍然会发送错误消息。 所以基本上,我能够创建我想要的错误,以便当在聊天室中按下按钮发送空白消息时,它会响应错误。但是,即使我在文本框中键入内容并尝试发送它,它也会响应相同的错误并且不发送消息。所以,请你帮忙!

2 个答案:

答案 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();
        }

    }
});