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

Android应用启动崩溃:[Fatal Error: Main]问题排查求助

解决NumberFormatException: For input string: "" 崩溃问题

嘿,我一眼就揪出问题根源了——你在onCreate方法里直接读取EditText的内容并尝试转成整数,但这时候Activity刚启动,用户还没来得及输入任何内容,拿到的是空字符串"",调用Integer.parseInt()自然就触发异常崩溃了。

你之前纠结的控件初始化时机是对的(确实要在setContentView之后),但真正的坑是读取输入内容的时机不对:不能在Activity刚创建时就去拿输入控件的内容,得等用户完成输入并触发相关操作(比如点击按钮)后再处理这些值。

修正后的代码示例

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 控件初始化这部分完全没问题
        final EditText name = findViewById(R.id.editText);
        final EditText date = findViewById(R.id.editText3);
        EditText month = findViewById(R.id.editText4);
        final EditText year = findViewById(R.id.editText5);
        Button b = findViewById(R.id.button);

        // 把输入处理逻辑放到按钮点击事件里,等用户操作后再执行
        b.setOnClickListener(v -> {
            // 读取姓名并做非空判断
            String nameStr = name.getText().toString().trim();
            if (nameStr.isEmpty()) {
                Toast.makeText(MainActivity.this, "请输入姓名", Toast.LENGTH_SHORT).show();
                return;
            }
            char[] n = nameStr.toCharArray();
            int total = 0;
            // 你的姓名数字计算逻辑放在这里...

            // 处理日期、月份、年份时,同样要做非空+格式校验
            String dateStr = date.getText().toString().trim();
            if (dateStr.isEmpty()) {
                Toast.makeText(MainActivity.this, "请输入日期", Toast.LENGTH_SHORT).show();
                return;
            }
            try {
                int dateNum = Integer.parseInt(dateStr);
                // 日期相关业务逻辑...
            } catch (NumberFormatException e) {
                Toast.makeText(MainActivity.this, "请输入正确的数字日期", Toast.LENGTH_SHORT).show();
            }

            // 月份、年份的处理可以参照日期的逻辑,先判空再转数字,并用try-catch捕获格式异常
        });
    }
}

额外提醒

  • 处理输入时记得调用trim(),避免用户输入空格导致的空内容误判
  • 对需要转数字的输入,用try-catch包裹转换逻辑,防止用户输入非数字内容触发崩溃
  • 永远不要在Activity初始化阶段(onCreate/onStart等)直接读取输入控件内容,此时控件都是空状态

内容的提问来源于stack exchange,提问作者Samrat Trehan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:25:27