通过检查 EditText 是否为空来阻止应用程序崩溃



所以我做了一个带有 2 个 EditText 输入的计算器,但是当 2 个字段为空时,我无法阻止应用程序崩溃。我为文本类型的编辑文本找到了一些解决方案,但由于我使用的是数字编辑文本而卡在这里。 顺便说一下,这是代码: {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun buPlusClick(view: View){
var num1:Int=ednum1.text.toString().toInt()
var num2:Int=ednum2.text.toString().toInt()
var result = num1+num2
val resultprint = "The result Is : $result"
tvresult.text=resultprint
}

}

您可能会遇到的错误是 NumberFormatException。这是因为 (" != [0-9]+( && value value !Int.MIN_VALUE。

您有三种选择:

  1. 正如桑迪普提到的,首先检查它是否为空。
  2. 使用toIntOrNull
  3. 捕获异常。

toInt如果 int 无效,则会引发异常 (NumberFormatException(。这意味着:

  1. 不是具有定义基数的数字(默认为 10;实际的整数,即 16 是十六进制,但在这里不适用(
  2. 数字太大或太小(低于 Int.MIN_VALUE 或高于 Int.MAX_VALUE(。
  3. 字符串为空。

首先检查它是否为空可以解决一半的问题;如果它是空的,它就无效。但是,如果有字母或数字太大,则无法解决。

您可以使用toIntOrNull()执行此操作。它就像toInt()一样,但如果转换失败,它会返回 null。您可以将 elvis 运算符与运行块一起使用,或者只使用简单的 if 语句来检查它是否为 null,并相应地处理问题。

val num1: Int = ednum1.text.toString().toIntOrNull() ?: run {
// Notify the user the first number is invalid
return; // return from the method to avoid NPE's
}
val num2: Int = ednum2.text.toString().toIntOrNull() ?: run {
// Notify the user the second number is invalid
return;
}

如果你不明白run在这里做什么,看看这个问题。您也可以完全摆脱run并分配一个数字值,只需让它为 null 并稍后处理它,或者其他什么。

int 的最大正值约为 24 亿。如果您期望输入的数字高于此值,请使用Long,等效地toLongOrNull()


最后一个选项是捕获错误。

var num1: Int? = try { ednum1.text.toString().toInt() } catch (e: NumberFormatException) { 
// You can do a lot of stuff in here; you can notify the user and `return` from the method,
// set it to null and handle it later, or assign an integer value. 
null 
}
var num2: Int? = try { ednum2.text.toString().toInt() } catch (e: NumberFormatException) { 
// see my comments on the first block; same applies here
null 
}

在我看来,它比toIntOrNull()(/toLongOrNull()(略大,但它是一种选择。

您需要检查第一个编辑文本是否为空。

//Java
private boolean isEmpty(EditText editText) {
if (editText.getText().toString().trim().length() > 0) 
return false;
return true;
}
//kotlin
private fun isEmpty(editText: EditText): Boolean {
return if (editText.text.toString().trim { it <= ' ' }.length > 0) false else true
}

然后执行以下代码:

fun buPlusClick(view: View){
if(!isEmpty(ednum1) && !isEmpty(ednum2)) {
var num1:Int=ednum1.text.toString().toInt()
var num2:Int=ednum2.text.toString().toInt()
var result = num1+num2
val resultprint = "The result Is : $result"
tvresult.text=resultprint
}
}

执行上述操作,检查所有功能。

最新更新