[英]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.