Пользовательский ввод int не будет нулевым - PullRequest
0 голосов
/ 22 декабря 2018

Я сделал код, в котором пользователь помещает значение между некоторым диапазоном, и мой код генерирует для них случайное число.Рандомизация работает правильно, но когда поля не заполнены, мое приложение вызывает сбой, как мне это исправить.

randNum.java

Button generateNum = findViewById(R.id.generate_number);

generateNum.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        EditText et = findViewById(R.id.fromNum);
        String sTextFromET = et.getText().toString();
        int fNum = Integer.valueOf(sTextFromET);


        EditText et1 = findViewById(R.id.toNum);
        String sTextFromET1 = et1.getText().toString();
        int sNum = Integer.valueOf(sTextFromET1);

        TextView ans = findViewById(R.id.ans);

        //                if(sNum == null || fNum == null){
            //
            //                    ans.setText(getString(R.string.enterNumError));
            //
            //                }
        //                else
        if(sNum < fNum){

            ans.setText(getString(R.string.max_min_error));

        }else {

            final int random = new Random().nextInt((sNum - fNum) + 1) + fNum;
            String ras = Integer.toString(random);
            ans.setText(ras);

        }

    }
});

Я пытаюсь использовать null, но это не работает.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Вам нужно обработать NumberFormatException , выданное Integer.valueOf () function

try {
      EditText et = findViewById(R.id.fromNum);
      String sTextFromET = et.getText().toString();
      int fNum = Integer.valueOf(sTextFromET);


      EditText et1 = findViewById(R.id.toNum);
      String sTextFromET1 = et1.getText().toString();
      int sNum = Integer.valueOf(sTextFromET1);

      TextView ans = findViewById(R.id.ans);

      if(sNum < fNum){
          ans.setText(getString(R.string.max_min_error));
      }else {
          final int random = new Random().nextInt((sNum - fNum) + 1) + fNum;
          String ras = Integer.toString(random);
          ans.setText(ras);
      }
}catch(NumberFormatException e){
    Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
}
0 голосов
/ 22 декабря 2018

Сначала нужно поставить проверку на нажатие кнопки.(Для проверки того, что пользователь ничего не вводил или просто вводил пробелы в любом из правок).

    btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            strNum1 = edtl.getText().toString().trim();
            strNum2 = edt2.getText().toString().trim();

            if (strNum1.length() == 0)
            {
                showAlert("Please enter Num 1");
            }
            else if (strNum2.length() == 0)
            {
                showAlert("Please enter Num 2");
            }
            else
            {
                int numvalue1 = Integer.parseInt(strNum1);
                int numvalue2 = Integer.parseInt(strNum2);
                generateNum (numvalue1, numvalue2);  //Call your function for generation of random number here
                //do your stuff here
            }
        }
    });

Надеюсь, это поможет вам понять проверку форм для пустых полей ввода.

PS: Я бы хотелРекомендуется добавить атрибут inputType для ваших EditTexts, если вы еще не добавили его в xml-файл, например:

android:inputType="number"

Так что вы можете избежать исключения на Integer.parseInt, если пользователь вводит любой алфавит или символ.

...