onKey和例外

时间:2013-03-15 05:03:34

标签: android validation

我正在构建一个Android应用程序,而且我遇到了2个问题。我目前正在使用onKey方法来解析文本框以获取用户输入的数据。这工作正常但如果用户选择让文本框留空并发送数据,这将导致我的应用程序崩溃。我想添加一个try和catch来处理/忽略该异常,如果有空白,即使按下回车键也不发送任何内容。

按下回车键时出现第二个问题。这导致发送数据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;

        }

       }
    });

感谢您的帮助!

2 个答案:

答案 0 :(得分: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;
        }

答案 1 :(得分:0)

  1. 第一个问题首先检查文本是否为空。

    if(txtSetKi.getText().length() != 0)
          // perform task 
    
  2. 使用第二个问题

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

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