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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:17:44