Android中EditText空字符串引发NumberFormatException问题求助
解决EditText输入时NumberFormatException崩溃问题
看起来你遇到的问题是虽然加了空字符串判断,但在输入过程中还是触发了NumberFormatException: empty String,这大概率是因为你的判断没覆盖到**空白字符(比如空格)**或者文本变化的中间状态,我来给你拆解问题并提供解决方案:
问题根源分析
你的isEmpty()判断只能检测长度为0的纯空字符串,但如果用户输入了空格(比如误触),或者在删除最后一个字符时文本处于临时空的状态(onTextChanged会在每一步文本变化时触发,包括删除过程),这时候isEmpty()返回false,但实际字符串无法被解析为double,从而抛出异常。
解决方案
1. 优化输入校验逻辑,覆盖空白字符与异常捕获
修改你的doCalculations()方法,先去除字符串两端的空白,再用更安全的判断方式,同时加上异常捕获防止崩溃:
import android.text.TextUtils; // 记得导入这个类 private void doCalculations() { // 先trim去除两端空白字符 String totalOutMekanik = edTotalOutMekanik.getText().toString().trim(); String totalInMekanik = edTotalInMekanik.getText().toString().trim(); // 使用TextUtils.isEmpty同时检查null和空字符串(更安全) if (!TextUtils.isEmpty(totalOutMekanik) && !TextUtils.isEmpty(totalInMekanik)) { try { double totOutMek = Double.parseDouble(totalOutMekanik); double totInMek = Double.parseDouble(totalInMekanik); double totInOutMek = totInMek - totOutMek; total_in_out_mekanik.setText(String.valueOf(totInOutMek)); } catch (NumberFormatException e) { // 处理无效数字输入的情况,比如输入了非数字字符 total_in_out_mekanik.setText("输入无效"); e.printStackTrace(); } } else { // 任一输入为空时,清空结果或显示提示 total_in_out_mekanik.setText(""); } }
2. 调整TextWatcher的触发时机
把doCalculations()的调用从onTextChanged移到afterTextChanged,因为afterTextChanged是在文本完全更新完成后触发,能避免文本变化过程中的临时空状态问题:
TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { doCalculations(); } }; edTotalInMekanik.addTextChangedListener(watcher); edTotalOutMekanik.addTextChangedListener(watcher);
3. 限制EditText输入类型(可选但推荐)
在XML布局中给两个EditText设置inputType="numberDecimal",确保用户只能输入数字和小数点,从源头减少无效输入:
<EditText android:id="@+id/edTotalOutMekanik" android:inputType="numberDecimal" ... /> <EditText android:id="@+id/edTotalInMekanik" android:inputType="numberDecimal" ... />
这些改动应该能彻底解决你遇到的崩溃问题,同时让输入处理更健壮。
内容的提问来源于stack exchange,提问作者Erald Developer
相关产品推荐
相关产品推荐

