2017-01-12 58 views
0

我有以下代碼:問題與文本框

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

我通常不知道很多關於Android,但只設置了str的值在onCreate方法。不應該在你的onClick方法中使用'str = input_msg.getText()。toString()。trim(),以便它在每次點擊時讀取字符串,而不是隻創建一次? –

+0

@ 911DidBush我想我在答案中提供了相同的信息。 –

回答

2

您不應該在Button上點擊EditText嗎?你正在做onCreate()Activity ..我懷疑有什麼東西已經寫在那裏已經開始的應用程序/啓動活動。所以一旦你點擊發送,它將不會存儲任何文本。因爲你的str將是null ..因此onCreate()EditText沒有什麼在str存儲。

即使你後來寫了一些東西......你並沒有試圖獲得該文本。

在您檢查str是否爲空之前,請嘗試將str=input_msg.getText().toString().trim();轉換爲onButtonClick()

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

    } 
});