#android #sockets #kotlin #try-catch
#Android #сокеты #kotlin #try -catch
Вопрос:
Я не хочу продолжать код (который открывает новое действие), если генерируется исключение (если ввод пустой или недопустимый). Но даже если я не ввожу все, он выполняет это так, как будто ничего не произошло. Ошибка поджарена, поэтому она ее улавливает.
try {
val ip1: String = ip_addr1.text.toString()
val port1: String = port1.text.toString()
val ip2: String = ip_addr2.text.toString()
val port2: String = port2.text.toString()
// Bind to MyService
Intent(this, MyService::class.java).also { intent ->
intent.putExtra("ip1", ip1)
intent.putExtra("port1", port1)
intent.putExtra("ip2", ip2)
intent.putExtra("port2", port2)
bindService(intent, connection, Context.BIND_AUTO_CREATE)
}
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
} catch (e: NumberFormatException) {
showToast("Enter IP in Port")
} catch (e: Exception) {
showToast(e.toString())
}
}
Комментарии:
1. Если это в функции, которую вы не хотите продолжать, поместите
return
внутри блока catch .2. Также актуально. По словам разработчиков языка Kotlin, try / catch — это запах кода, если он не находится в служебной функции низкого уровня, которую вы создали, поэтому вам не нужно использовать ее в общем коде приложения. medium.com/@elizarov/kotlin-and-exceptions-8062f589d07
Ответ №1:
У вас есть редактировать тексты и получать текст из них, вы не преобразуете ни один из них в числа, поэтому нет исключения из формата чисел для перехвата. Пустой текст редактирования имеет допустимый текст строки как ничто ""
, затем вы добавляете его дополнительно.
Если вы хотите иметь числовое значение, то это вызовет try catch
val ip1 = Integer.parseValue(ip_addr1.text.toString())
//same parsing for the others
Intent(this, MyService::class.java).also { intent ->
intent.putIntExtra("ip1", ip1)
//same for the others
...
Комментарии:
1. Но в Котлине
toIntOrNull()
это был бы предпочтительный способ сделать это.2. Я думаю, что мне нужны IP-адреса в виде строк, что-то вроде 127.0.0.1, я думаю, не может быть представлено в виде числа.
3. Это не число, проблема с этим все еще остается в моем ответе, зачем пытаться / ловить, нечего ловить, если вы используете strings @GeoCap
4. Да, я думаю, мне нужно будет использовать что-то еще, кроме try / catch, спасибо за разъяснение