Android Kotlin开发中EditText内容转Int报NumberFormatException如何解决
错误原因
- 核心报错为
java.lang.NumberFormatException: For input string: "",本质是尝试将空字符串转换为Int类型失败 - 你将读取EditText内容并转Int的逻辑写在了
onCreate生命周期方法中,此时Activity刚完成布局加载,用户还未进行任何输入,EditText默认内容为空字符串,直接调用toInt()就会抛出格式转换异常导致闪退 - 额外逻辑问题:即使后续用户输入了内容,你提前在
onCreate中读取的X1、Y1还是初始的旧值,点击按钮计算时永远用的是启动时的数值,无法响应用户的输入修改
修复方案
- 将读取EditText内容并转换的逻辑移动到按钮点击事件的回调内部,每次点击按钮时再读取当前最新的输入内容
- 使用Kotlin提供的安全转换方法
toIntOrNull()替代toInt(),当输入为空、非数字格式时会返回null而非直接抛出异常,同时增加非法输入的提示逻辑
修复后完整代码
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val X: EditText = findViewById(R.id.num12) val Y: EditText = findViewById(R.id.num2) val B: Button = findViewById(R.id.btn1) val vir: TextView = findViewById(R.id.virw) B.setOnClickListener { // 每次点击时读取最新输入内容,安全转换 val X1 = X.text.toString().toIntOrNull() val Y1 = Y.text.toString().toIntOrNull() if (X1 != null && Y1 != null) { // 两个输入都是合法数字,正常计算 vir.text = "add new ${addtwonumber(X1, Y1)}" } else { // 输入非法,给出提示 vir.text = "请输入合法的数字" } } } private fun addtwonumber(a:Int, b:Int): Int { return a + b } }
内容的提问来源于stack exchange,提问作者Neelesh Sahu
相关产品推荐
相关产品推荐

