私は Android アプリケーションを構築していますが、2 つの問題に直面しています。現在、onKey メソッドを使用してテキスト ボックスを解析し、ユーザーが入力したデータを取得しています。これは正常に機能していますが、ユーザーがテキスト ボックスを空白にしてデータを送信することを選択すると、アプリケーションがクラッシュします。try と catch を追加して、その例外を処理/無視し、Enter キーが押されても空白がある場合は何も送信しないようにしたいと考えています。
Enterキーを押すと、2番目の問題が発生します。これにより、データが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;
}
}
});
ご助力いただきありがとうございます!