#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()
}