Android应用弹窗功能需求及SplashActivity代码失效问题求助
问题分析与解决方案
我帮你梳理下导致第二个时间校验功能失效的几个关键问题,然后给出修复后的完整代码:
核心问题点
- 时间范围设置完全偏离需求:你需要校验的是「早于8:00 AM 或 晚于2:00 PM」,但代码里错误地把开启时间设成了10:59 AM、关闭时间设成了11:00 AM,完全不符合业务逻辑。
- 判断逻辑搞反:需求是时间不在允许范围内才触发弹窗,但代码里写的是在错误的窄时间区间内才弹窗,逻辑完全相反。
- 语法错误:Java中逻辑与运算符是
&&,但你写成了HTML转义字符&&,这会导致编译或运行异常。 - AlertDialog未执行显示操作:你创建了AlertDialog.Builder,但遗漏了调用
show()方法,所以即使条件满足也不会弹出弹窗。 - Calendar使用不严谨:用
Calendar.HOUR(12小时制)配合AM_PM容易出错,建议用Calendar.HOUR_OF_DAY(24小时制)来设置和判断时间,更直观且不易出错。
修复后的完整代码
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // **************** ORDER SLOT ******************* // Calendar currentTime = Calendar.getInstance(); // 设置允许下单的开始时间:上午8:00(24小时制为8点) Calendar openingTime = Calendar.getInstance(); openingTime.set(Calendar.HOUR_OF_DAY, 8); openingTime.set(Calendar.MINUTE, 0); openingTime.set(Calendar.SECOND, 0); // 设置允许下单的结束时间:下午2:00(24小时制为14点) Calendar closingTime = Calendar.getInstance(); closingTime.set(Calendar.HOUR_OF_DAY, 14); closingTime.set(Calendar.MINUTE, 0); closingTime.set(Calendar.SECOND, 0); // 判断当前时间是否不在允许范围内:早于8点 或 晚于14点 if (currentTime.before(openingTime) || currentTime.after(closingTime)) { // 创建并显示提示弹窗 AlertDialog.Builder builder = new AlertDialog.Builder(SplashScreen.this); builder.setTitle(R.string.app_name); builder.setIcon(R.mipmap.ic_launcher); builder.setMessage("Sorry Time UP, Please Order Tomorrow from 08:00 AM to 02:00 PM") .setCancelable(false) .setPositiveButton("Exit", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 退出当前Activity,若需完全退出应用可搭配finishAndRemoveTask()(API 21+) finish(); } }); // 关键:调用show()方法显示弹窗 builder.create().show(); } }
额外说明
- 用
Calendar.HOUR_OF_DAY直接使用24小时制设置时间,避免了AM/PM的混淆,比如下午2点直接设为14即可,逻辑更清晰。 - 逻辑判断调整为
before(openingTime) || after(closingTime),完全匹配你需求中「时间不在允许区间内」的触发条件。 - 补充了
builder.create().show(),确保弹窗能正常显示。 - 代码中设置了秒数为0,避免因几秒的误差导致判断结果不符合预期,让时间校验更严谨。
内容的提问来源于stack exchange,提问作者Ali Abdullah Khan
相关产品推荐
相关产品推荐

