2013-03-15 36 views
0

我正在構建一個Android應用程序,我面臨着兩個問題。我目前使用onKey方法來解析文本框來獲取用戶輸入的數據。這工作正常,但如果用戶選擇讓文本框爲空併發送數據,這將導致我的應用程序崩潰。我想添加一個try和catch來處理/忽略該異常,並且即使按下回車鍵也沒有發送任何內容。onKey和異常

我按下回車鍵時會出現第二個問題。這導致發送數據2次,這有點令人討厭。我認爲這是因爲我的代碼沒有反彈,程序註冊了一個按鍵和一個鍵釋放。我真的不知道如何過濾這個,我可能需要一些輸入。

這裏是我的代碼:

//Listen to the "Enter" button state changes by user selection of keypad 
txtSetKp.setOnKeyListener(new OnKeyListener(){           //This method waits for the "enter" key to be hit 
    public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 

     switch(arg1) 
     { 
       case KeyEvent.KEYCODE_ENTER: 
        float newSetKp = Float.parseFloat(txtSetKp.getText().toString()); 

        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //If "enter" pressed, hide keyboard 
        if(btSocket != null && btSocket.isConnected()){ 
        mConnectedThread.send("P" + newSetKp); 
        Log.e(TAG, "P"+newSetKp); 
        } 
        imm.hideSoftInputFromWindow(txtSetPoint.getWindowToken(), 0); 

        return true; 
       default: 
        return false; 

     } 

     } 
    }); 

//Listen to the "Enter" button state changes by user selection of keypad 
txtSetKi.setOnKeyListener(new OnKeyListener(){           //This method waits for the "enter" key to be hit 
    public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 

     switch(arg1) 
     { 
       case KeyEvent.KEYCODE_ENTER: 
        float newSetKi = Float.parseFloat(txtSetKi.getText().toString()); 

        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //If "enter" pressed, hide keyboard 
        mConnectedThread.send("I" + newSetKi); 
        imm.hideSoftInputFromWindow(txtSetPoint.getWindowToken(), 0); 

        return true; 
       default: 
        return false; 

     } 

     } 
    }); 

感謝您的幫助!

+0

您可以發佈您logcat的嗎? – Vinay 2013-03-15 05:08:02

+0

當然,我試圖發佈一個副本/過去,但格式是相當醜陋的有沒有辦法做到這一點正確? – Mathieu660 2013-03-15 05:20:47

回答

0
  1. 對於第一個問題先檢查文本是否爲空。

    if(txtSetKi.getText().length() != 0) 
         // perform task 
    
  2. 第二個問題,請使用

    if(keyEvent == KeyEvent.ACTION_DOWN) 
         // perform task 
    

    if(keyEvent == KeyEvent.ACTION_UP) 
          // perform task 
    
0

試試這個

txtSetKp.setImeOptions(EditorInfo.IME_ACTION_DONE); 
    txtSetKp.setOnEditorActionListener(new OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        String text = txtSetKp.getText().toString(); 
        if(isNullOrEmpty(text)) 
         System.out.println("Empty"); 
        else 
         System.out.println("Correct"); 
        return false; 
       } 
      }); 

     } 
     public boolean isNullOrEmpty(String value) { 
      return value == null || value.length() == 0; 
     }