NumberFormatException в методе onTextChanged, когда входная строка равна "" - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать диалоговое окно оповещения, в котором можно вводить только цифры, и если введенные числа меньше 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$3.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();

1 Ответ

0 голосов
/ 05 марта 2020

Это потому, что внутри onTextChanged () вы делаете Integer.parseInt, и вы только что удалили или очистили поле. Теперь он пуст, и вы пытаетесь разобрать пустую строку. Попробуйте добавить проверку на пустую строку в вашем условии if.

if (s.isNotEmpty()) {  // Add this line to check for empty string
   if (Integer.parseInt....){
   } else { 
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...