Android Studio条件判断失效:点击Update按钮Toast异常显示维护提示
问题根源与修复方案
你的代码始终触发Call Maintenance的核心问题是条件判断的语法完全错误,尤其是正则表达式的用法和数值范围的判断逻辑:
1. 错误点拆解
- 正则
[0000-9999]、[1500-3000]是字符集语法,不是数值范围匹配。比如[1500-3000]实际只会匹配单个字符:1、5、0、3,完全达不到你想要的“匹配1500到3000之间的数”的效果。 - 直接用字符串匹配数值区间本身就不合理,输入的小时、燃油值都是数值,应该转成整数后再做范围判断,既准确又避免正则的坑。
2. 修复后的代码
btnUpdateTractor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 先获取输入内容并去除首尾空格 String hoursStr = hoursEdit.getText().toString().trim(); String oilStr = oilEdit.getText().toString().trim(); String fuelStr = fuelEdit.getText().toString().trim(); // 执行数据库更新 dbHandler.updateTractor(tractor, tractorEdit.getText().toString(), hoursStr, oilStr, fuelStr); // 转换输入为数值,捕获非数字输入的异常 int hours = -1; int fuel = -1; try { hours = Integer.parseInt(hoursStr); fuel = Integer.parseInt(fuelStr); } catch (NumberFormatException e) { // 输入不是有效数字,直接触发维护提示 Toast.makeText(user.this, "Call Maintenance", Toast.LENGTH_SHORT).show(); return; } // 修正后的条件判断逻辑 if (hours >= 0 && hours <= 9999 && oilStr.equals("Good") && fuel >= 1500 && fuel <= 3000) { Toast.makeText(user.this, "Tractor Updated", Toast.LENGTH_SHORT).show(); Intent i = new Intent(user.this, user.class); startActivity(i); } else if (hours >= 0 && hours <= 9999 && oilStr.equals("Low") && fuel >= 500 && fuel <= 1000) { Toast.makeText(user.this, "Add Oil and Fuel", Toast.LENGTH_SHORT).show(); Intent i = new Intent(user.this, user.class); startActivity(i); } else { Toast.makeText(user.this, "Call Maintenance", Toast.LENGTH_SHORT).show(); } } });
3. 关键优化点
- 用
trim()处理输入字符串,避免用户误输入空格导致匹配失败。 - 数值转换时添加异常捕获,防止非数字输入引发崩溃。
- 用
>=、<=直接判断数值区间,逻辑清晰且准确,彻底替代错误的正则用法。 - 提前拦截无效数值输入,减少后续无效判断逻辑。
内容的提问来源于stack exchange,提问作者rob seper
相关产品推荐
相关产品推荐

