You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:27:37