Приложение вылетает, когда я нажимаю кнопку, если EditText пуст

#android-studio #kotlin

Вопрос:

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

Вот код Котлина:

 class MainActivity : AppCompatActivity() {

    lateinit var etTemp: EditText
    lateinit var radioGroup: RadioGroup
    lateinit var btnConverter :Button
    lateinit var tempConverted: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        title = "Zeeshan's Temperature Converter"

        etTemp = findViewById(R.id.etTemp)
        radioGroup = findViewById(R.id.radioGroup)
        btnConverter = findViewById(R.id.btnConverter)
        tempConverted = findViewById(R.id.tempConverted)

        btnConverter.setOnClickListener {

            val id = radioGroup.checkedRadioButtonId
            val radioButton = findViewById<RadioButton>(id)

            if (radioButton == findViewById(R.id.radioC)){
                val temp =etTemp.text.toString().toInt()

                val result = temp * 9/5   32

                tempConverted.setText(result.toString())
            }
            else if (radioButton == findViewById(R.id.radioF)){
                val tempy =etTemp.text.toString().toInt()

                val resulty = (tempy - 32) / 1.8

                tempConverted.setText(resulty.toString())
            }
            else{
                Toast.makeText(this@MainActivity, "Select one conversion scale", Toast.LENGTH_SHORT).show()
            }


        }
    }
}
 

Комментарии:

1. Является ли «etTemp» переменной, которая остается пустой? и приложение вылетает?

2. вы пробовали читать сообщения об ошибках на logcat?

Ответ №1:

Вы должны проверить, есть ли etTemp.text.toString() == «» (это пустая строка) если это так, то не пытайтесь преобразовать ее в int. Проблема возникает при попытке преобразовать значение «null» в int.

Ответ №2:

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

 btnConverter.setOnClickListener {

// Add the validation check here ... like this -> if(etTemp.length() > 0){

    val id = radioGroup.checkedRadioButtonId
    val radioButton = findViewById<RadioButton>(id)

    if (radioButton == findViewById(R.id.radioC)){
        val temp =etTemp.text.toString().toInt()

        val result = temp * 9/5   32

        tempConverted.setText(result.toString())
    }
    else if (radioButton == findViewById(R.id.radioF)){
        val tempy =etTemp.text.toString().toInt()

        val resulty = (tempy - 32) / 1.8

        tempConverted.setText(resulty.toString())
    }
    else{
        Toast.makeText(this@MainActivity, "Select one conversion scale", Toast.LENGTH_SHORT).show()
    }
// Close the check here -> }
    else{
    //     Prompt the user to put some text in the field - this is called form validation before processing
    //     Toast.makeText(.....).show
    }


}
 

Ответ №3:

проверьте, ввел ли пользователь какие-либо данные или нет, один из способов, как показано ниже (Котлин):

 if(!etTemp.text.isNullOrEmpty())
{
    temp =etTemp.text.toString().toInt()
}