Android Studio中EditText操作致应用无响应问题求助
解决EditText空字符串转Integer导致的NumberFormatException问题
嗨,我看到你遇到的问题了——当点击加减按钮时应用直接崩溃,从Logcat报错能明确看到是java.lang.NumberFormatException: For input string: "",也就是EditText为空时,直接调用Integer.parseInt()无法把空字符串转成整数,这就是核心原因。咱们一步步来修复这个问题:
解决思路
- 先检查EditText输入内容:转换整数前,先判断文本是否为空/空白,为空时给一个默认值(比如你布局里的hint值
100) - 添加异常捕获兜底:防止意外的格式问题(比如用户输入了空格或者其他非数字内容)
- 可选:处理边界值,比如不让数字减到负数以下
修改后的代码
把你原来的btnDec和btnInc点击事件替换成下面的代码:
btnDec.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String inputText = edtPrime.getText().toString().trim(); int number; // 处理空输入,使用默认值100 if (inputText.isEmpty()) { number = 100; } else { try { number = Integer.parseInt(inputText); // 可选:不让数字小于1,避免负数 if (number <= 1) { number = 1; edtPrime.setText(String.valueOf(number), TextView.BufferType.EDITABLE); return; } } catch (NumberFormatException e) { // 兜底:如果输入了非数字内容,也用默认值100 number = 100; } } number--; edtPrime.setText(String.valueOf(number), TextView.BufferType.EDITABLE); } }); btnInc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String inputText = edtPrime.getText().toString().trim(); int number; if (inputText.isEmpty()) { number = 100; } else { try { number = Integer.parseInt(inputText); } catch (NumberFormatException e) { number = 100; } } number++; edtPrime.setText(String.valueOf(number), TextView.BufferType.EDITABLE); } });
代码说明
trim()处理:先去掉文本前后的空格,避免用户输入空格导致的空字符串判断失误- 空输入判断:当EditText为空时,直接使用你布局hint里的默认值
100,保证不会出现空字符串转整数的问题 - try-catch捕获异常:即使设置了
inputType="number",也可能出现意外的输入格式,用try-catch兜底可以避免应用崩溃 - 边界值处理(可选):在自减逻辑里加了判断,不让数字小于1,你可以根据自己的需求调整这个边界值
另外,你布局里的android:inputType="number"已经做得很好了,能限制用户输入非数字内容,再加上上面的代码处理,就能彻底解决这个崩溃问题啦。
内容的提问来源于stack exchange,提问作者Karuntos
相关产品推荐
相关产品推荐

