当输入字符串等于“”时 onTextChanged 方法中的 NumberFormatException
NumberFormatException in onTextChanged method when input string equals to ""
我尝试制作一个警告对话框,其中只能输入数字,如果输入的数字小于 5,则“确定”按钮将被禁用。当我输入内容然后将其删除时,我得到 NumberFormatException:
Process: com.example.emotionsanalyzer, PID: 9143
java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:627)
at java.lang.Integer.parseInt(Integer.java:650)
at com.example.emotionsanalyzer.ui.CameraActivity.onTextChanged(CameraActivity.java:245)
这是部分代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
builder.setView(input);
builder.setPositiveButton("OK", (dialog, which) -> {
intervalInMs = Integer.parseInt(input.getText().toString());
});
builder.setNegativeButton("Anuluj", (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
input.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (Integer.parseInt(s.toString()) >= 5){
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
}
else{
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
dialog.show();
这是因为在 onTextChanged() 中您执行了 Integer.parseInt 并且您刚刚删除或清除了该字段。它现在是空的,你正试图 parseInt 一个空字符串。
尝试在您的 if 条件中添加空字符串检查。
if (s.isNotEmpty()) { // Add this line to check for empty string
if (Integer.parseInt....){
} else {
}
}
我尝试制作一个警告对话框,其中只能输入数字,如果输入的数字小于 5,则“确定”按钮将被禁用。当我输入内容然后将其删除时,我得到 NumberFormatException:
Process: com.example.emotionsanalyzer, PID: 9143
java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:627)
at java.lang.Integer.parseInt(Integer.java:650)
at com.example.emotionsanalyzer.ui.CameraActivity.onTextChanged(CameraActivity.java:245)
这是部分代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
builder.setView(input);
builder.setPositiveButton("OK", (dialog, which) -> {
intervalInMs = Integer.parseInt(input.getText().toString());
});
builder.setNegativeButton("Anuluj", (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
input.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (Integer.parseInt(s.toString()) >= 5){
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
}
else{
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
dialog.show();
这是因为在 onTextChanged() 中您执行了 Integer.parseInt 并且您刚刚删除或清除了该字段。它现在是空的,你正试图 parseInt 一个空字符串。 尝试在您的 if 条件中添加空字符串检查。
if (s.isNotEmpty()) { // Add this line to check for empty string
if (Integer.parseInt....){
} else {
}
}