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

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);
    }
}
额外优化建议
  1. 修复clear方法的逻辑错误:你的clear方法里if (view.getId()==R.id.clear);后面多了一个分号,导致不管点击哪个绑定了clear方法的按钮都会清空输入,去掉分号即可:
public void clear(View view) {
    if (view.getId()==R.id.clear) {
        Ans.setText("");
    }
}
  1. 添加异常捕获(可选):虽然你的输入由按钮控制不会出现非数字,但为了代码更健壮,可以给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:34:54