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
相关产品推荐
相关产品推荐

