Вопрос:

Мое приложение продолжает падать, когда я нажимаю кнопку «Угадай»

android android-studio

20 просмотра

3 ответа

1 Репутация автора

Когда я ничего не ввожу в EditText, а затем нажимаю кнопку «Угадай», мое приложение продолжает падать, и я не могу найти проблему с моим кодом.

    public void generateRandomNos(){
            Random rand = new Random();
            randomNumber = rand.nextInt(20)+1;
        }

    btnGuess.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int guessValue = 
    Integer.parseInt(etNumber.getText().toString());
                    String message;

                    if(guessValue > randomNumber){
                        message = "Lower !";
                        etNumber.setText("");
                    }
                    else if (guessValue < randomNumber){
                        message = "Higher !";
                        etNumber.setText("");
                    }
                    else{
                        message = "You got it right. GG ";
                        etNumber.setText("");
                        generateRandomNos();
                    }


    Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
                }
            });

Приложение не должно аварийно завершать работу, если в поле EditText нет текста и когда нажата кнопка.

Автор: Manny05 Источник Размещён: 11.08.2019 07:35

Ответы (3)


0 плюса

432 Репутация автора

Конечно, это будет сбой, потому что вы никогда не назначали этот метод generateRandomNos()до события Click. Так что ваше приложение не знает, каково значение randomNumberперед триггером события. То, что вы можете сделать сейчас, это получить значение randomNumberперед выполнением щелчка btnGuess. Например

btnGuess.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                        generateRandomNos();  // i change this position
                    int guessValue = 
    Integer.parseInt(etNumber.getText().toString());
                    String message;

                    if(guessValue > randomNumber){
                        message = "Lower !";
                        etNumber.setText("");
                    }
                    else if (guessValue < randomNumber){
                        message = "Higher !";
                        etNumber.setText("");
                    }
                    else{
                        message = "You got it right. GG ";
                        etNumber.setText("");
                    }
Автор: Nanda Z Размещён: 11.08.2019 07:44

0 плюса

117 Репутация автора

Вы ввели любой другой символ, кроме десятичной цифры в EditText?

parseInt docs говорит:

Parses the string argument as a signed decimal integer. 
The characters in the string must all be decimal digits, 
except that the first character may be an ASCII minus sign '-' ('\u002D') to 
indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a 
positive value. The resulting integer value is returned, exactly as if the 
argument and the radix 10 were given as arguments to the 
parseInt(java.lang.String, int) method.

Вы можете использовать синтаксис try-catch для проверки этого

try {
        int value = Integer.parseInt(str);
}catch(NumberFormatException ex) {

}
Автор: MJ Studio Размещён: 11.08.2019 07:49

0 плюса

389 Репутация автора

Как вы упомянули в своем вопросе, эта ошибка возникает, когда вы ничего не вводите в текст редактирования

Поэтому сначала проверьте, является ли текст редактирования пустым, или выполните необходимые действия.

btnGuess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


       if(!etNumber.getTex.toString().equals("")) {           
         int guessValue =  Integer.parseInt(etNumber.getText().toString());

                String message;

                if(guessValue > randomNumber){
                    message = "Lower !";
                    etNumber.setText("");
                }
                else if (guessValue < randomNumber){
                    message = "Higher !";
                    etNumber.setText("");
                }
                else{
                    message = "You got it right. GG ";
                    etNumber.setText("");
                    generateRandomNos();
                }


        Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
            }
         } else {
           Toast.makeText(MainActivity.this,"EditText Is empty",Toast.LENGTH_SHORT).show();
         }
   });

Примечание: И убедитесь, что вы используете атрибут android: inputType = "number" для edittext, чтобы вы могли получать только цифры в качестве входных данных

Автор: Praveen Panishetti Размещён: 11.08.2019 07:49
Вопросы из категории :
32x32