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