gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:42:21 25 4
gpt4 key购买 nike

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

我希望有人能指出我错过的东西?

编辑

我通过用户界面中的按钮调用setNotif()。我基本上将其改造为只有一个用于测试的按钮。我得到了 toast ,但无论我怎么努力,警报都没有响起。

这是原始日期选择器代码

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();
}

这是我尝试替换它的方法

它调用查询以从我的数据库中获取特定日期,并据称在 3 天前设置闹钟。我通过更改手机日期并将闹钟设置为今天来进行测试,但两者都不起作用。

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);

你会赢。

关于java - 根据数据库中的日期设置警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com