所以我用2个EditText输入制作了一个计算器,但是当2个字段为空时,我无法阻止应用程序崩溃。我找到了一些针对Text类型的EditText的解决方案,但由于我使用的是数字EditText,因此被卡在此处。 下面是代码: {
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
}
}
答案 0 :(得分:0)
您需要先检查editText是否为空。
//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
}
}
执行以上操作检查所有功能。
答案 1 :(得分:0)
您可能会收到的错误是NumberFormatException。这是因为(“”!= [0-9] +)&&值的值!
您有三个选择:
toIntOrNull
toInt
会引发异常(NumberFormatException)。这意味着:
首先检查是否为空可以解决一半的问题;如果为空,则无效。但是,如果有字母或数字太大,则无法解决。
您可以为此使用toIntOrNull()
。就像toInt()
一样,但是如果转换失败,它将返回null。您可以将Elvis运算符与run块一起使用,或者仅使用简单的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
在这里做什么,请查看this question。您也可以完全摆脱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()
)体积更大,但这是一个选择。