Kotlin代码运行App闪退报java.lang.NumberFormatException异常问题
问题原因及修复方案
报错原因
控制台抛出异常:
java.lang.NumberFormatException: For input string: "null"
- 代码中的
editTextH、editTextW初始化赋值为null,没有绑定实际的界面控件实例,直接调用editTextH?.text.toString()会把null值转为字符串"null" - 调用
toFloat()方法时,"null"不属于合法的浮点型数字格式,直接抛出类型转换异常,触发App闪退 - 如果控件已绑定但页面初始化时直接执行计算逻辑,此时用户还未输入内容,取到的空字符串也会触发同类转换异常
修复方案
第一步:完成控件实例绑定
先通过findViewById或者视图绑定拿到控件真实实例,不要让控件一直处于null状态:
// 替换R.id.xxx为你项目中对应的控件id editTextH = findViewById(R.id.edit_text_height) editTextW = findViewById(R.id.edit_text_weight) result = findViewById(R.id.tv_result)
第二步:增加取值合法性校验
转Float前增加非空校验和异常捕获,处理空输入、非法输入的场景,同时规避除0异常:
// 建议把这段计算逻辑放到按钮点击等用户主动触发的回调中,不要页面刚加载就执行 val hStr = editTextH?.text?.toString()?.trim() ?: "0" val wStr = editTextW?.text?.toString()?.trim() ?: "0" val h: Float = try { hStr.toFloat() / 100 } catch (e: NumberFormatException) { 0f // 输入非法时的默认值,可按需调整 } val w: Float = try { wStr.toFloat() } catch (e: NumberFormatException) { 0f // 输入非法时的默认值,可按需调整 } val res: Float = if (h != 0f) w/(h*h) else 0f result?.text = res.toString()
内容的提问来源于stack exchange,提问作者Over Time
相关产品推荐
相关产品推荐

