Android数学测验应用无输入点击提交按钮崩溃问题排查
问题原因
崩溃的核心原因是空值判断顺序错误:在submit方法中,你先执行了Integer.parseInt(Ans.getText().toString()),当Ans为空字符串时,这行代码会直接抛出NumberFormatException,而你的空值判断代码在这之后,根本没有机会执行。
修复方案
将空值判断逻辑移到所有解析操作的最前面,同时优化判断逻辑(用TextUtils.isEmpty可同时处理空字符串和null的情况),修改后的submit方法如下:
public void submit(View view) { // 先获取并复用用户输入的字符串,避免多次调用getText() String userAnsStr = Ans.getText().toString().trim(); // 优先判断空输入,直接返回不执行后续逻辑 if (TextUtils.isEmpty(userAnsStr)) { Toast.makeText(this, "Enter Answer", Toast.LENGTH_SHORT).show(); return; } // 后续正常解析和判断逻辑 int num1 = Integer.parseInt(Num1.getText().toString()); int num2 = Integer.parseInt(Num2.getText().toString()); int ans = num1 + num2; int get_user_ans = Integer.parseInt(userAnsStr); if (ans == get_user_ans) { Result.setText("CORRECT!!"); Result.setTextColor(Color.GREEN); startActivity(new Intent(this, Level1.class)); } else { Result.setText("INCORRECT!!"); Result.setTextColor(Color.RED); } }
额外优化建议
- 修复clear方法的逻辑错误:你的
clear方法里if (view.getId()==R.id.clear);后面多了一个分号,导致不管点击哪个绑定了clear方法的按钮都会清空输入,去掉分号即可:
public void clear(View view) { if (view.getId()==R.id.clear) { Ans.setText(""); } }
- 添加异常捕获(可选):虽然你的输入由按钮控制不会出现非数字,但为了代码更健壮,可以给
Integer.parseInt添加try-catch:
try { int get_user_ans = Integer.parseInt(userAnsStr); // 后续判断逻辑 } catch (NumberFormatException e) { Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show(); }
内容的提问来源于stack exchange,提问作者Umar
相关产品推荐
相关产品推荐

