【问题标题】:ClassCastException for Time Picker value + Local Notification时间选择器值的 ClassCastException + 本地通知
【发布时间】:2018-10-11 17:39:25
【问题描述】:

下面的代码给了我一个java.lang.ClassCastException

long time=timePicker.getDate().getTime();
Display.getInstance().scheduleLocalNotification(notification, time, LocalNotification.REPEAT_DAY);

当我执行此代码时,出现以下错误:

java.lang.ClassCastException - java.lang.Integer 无法转换为 java.util.Date

getTime() 返回 long 而不是 int,因此代码是正确的。这个问题的原因是什么?

timePicker 变量是一个 Picker

timePicker=new Picker();
timePicker .setType(Display.PICKER_TYPE_TIME);

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    时间选择器不返回日期。您应该将代码替换为:

    int DAY = 24 * 60 * 60000;
    int time=timePicker.getTime();
    Display.getInstance().scheduleLocalNotification(notification, time * 60000 + System.currrentTimeMillis() / DAY * DAY, LocalNotification.REPEAT_DAY);
    

    在这种情况下,时间将是自午夜以来的秒数。原因是时间选择器不包括日期部分或时区。 Date 在这两个方面非常脆弱/令人困惑,因此我们使用该方法提供了更一致的结果。持续时间选择器也是如此。

    【讨论】:

    • 嗨,Shai,您的代码也不起作用。当我使用它时,我有以下异常; Exception: java.lang.IllegalArgumentException - Cannot schedule a notification to a past time
    • 我回答了关于选择器的错误,我修改了答案以涵盖您应该为其余代码更改的部分
    • Shai,你的代码不起作用。使用您的代码,通知不会在我安排的选定时间触发。当我选择的时间到来时,什么都不会发生。
    • 我输入了% 而不是/,我现在更正了...我建议调试和检查变量的值以发现类似的错误
    • Shai,您的代码中还有另一个问题。您写的是 1000 而不是 60000。我进行了更改,现在效果很好。这是因为这里的时间值是以分钟为单位的,而不是以秒为单位的。您假设它以秒为单位,这就是为什么您将其乘以 1000 以获得以毫秒为单位的值。它应该乘以 60000 以获得以毫秒为单位的值。最后的代码是:Display.getInstance().scheduleLocalNotification(notification, time * 60000 + System.currrentTimeMillis() / DAY * DAY, LocalNotification.REPEAT_DAY); 我的问题现在解决了。感谢您的帮助!
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2020-12-28
    相关资源
    最近更新 更多