繁体   English   中英

根据数据库中的日期设置警报

[英]Setting an alarm based on date in database

我找到了可以帮助我设置正常警报的教程,但是在该教程中,我们使用了日期选择器来设置警报时间。 一切进展顺利,因此我尝试用自己的方法替换日期选择器,并以此方式设置警报。 问题是它似乎不起作用,当我将该日期设置为今天时没有警报弹出,但是当我使用日期选择器时可以正常工作。 谁能告诉我我在做什么错? 我通过调试运行了这个查询,查询返回的是正确的日期,我得到了正确的数字,但所有这些似乎都不起作用。

我希望有人能指出我错过的事情吗?

编辑

我通过ui中的按钮调用setNotif() 我基本上将其重塑为仅具有一个测试按钮。 我干杯,但无论尝试如何,都不会响起警报。

这是原始的日期选择器代码

public void onDateSelectedButtonClick(View v){

    int day = picker.getDayOfMonth();
    int month = picker.getMonth();
    int year = picker.getYear();

    Calendar c = Calendar.getInstance();
    c.set(year, month, day);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);

    scheduleClient.setAlarmForNotification(c);


    Toast.makeText(this, "Notification set for: "+ day +"/"+ (month+1) +"/"+ year, Toast.LENGTH_SHORT).show();
}

这是我尝试替换为的方法

它调用查询以从我的数据库中获取特定日期,并且应该在三天前设置警报。 我通过更改手机日期并将其设置为今天的闹钟来对其进行测试,但均未奏效。

public void setNotif() {

    // Getting the next date of payments which the alarm will be based on
    DatabaseHelper db = new DatabaseHelper(this);

    String thisdate = getCurDate();
    Cursor cur = db.nextdate(thisdate);
    String date= "";
    if (cur!= null) {
        if (cur.moveToFirst()) {
            date = cur.getString(0);
        }
    }
    try {
        DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date input = inputFormat.parse(date);
        String finaldate = inputFormat.format(input);
        String d = finaldate.substring(8,10);
        String m = finaldate.substring(5,7);
        String y = finaldate.substring(0,4);
        int da = Integer.parseInt(d);
        int month = Integer.parseInt(m);
        int year = Integer.parseInt(y);
        int day = da - 3;

        Calendar c = Calendar.getInstance();
        c.set(year, month, day);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);

        scheduleClient.setAlarmForNotification(c);

        Toast.makeText(this, "Notification set for: "+ day +"/"+ month +"/"+ year, Toast.LENGTH_SHORT).show();
    }catch (Exception ex) {
        Alerts.CatchError(Kik.this, ex.toString());
    }

}

这是一个简单的路障碰上了,不幸的是,它并没有真正有什么做的Android。 这是Java日期/日历的保留。

当您从示例代码中的日期选择器中将日期从int month拉出时,得出的值基于0:

int month = picker.getMonth();
// January -> 0
// February -> 1
// ...
// December -> 11

您数据库中的日期是我们习惯查看的日期: 2016-12-25是2016年12月25日。

当您设置Calendar的值时,它期望索引为0的月份。 您给它一个索引为1的月份。 因此,您需要从月份中减去1以获得正确的值。 我将制作一张桌子,这样很清楚发生了什么事:

Month String  |  Database Value  |  Calendar Value 
January       |  1               |  0
February      |  2               |  1
March         |  3               |  2
April         |  4               |  3
May           |  5               |  4
June          |  6               |  5

希望这很明显。

因此,在您的情况下,如果您更改行:

c.set(year, month, day);

成为...

c.set(year, month - 1, day);

你会赢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM