2015-05-04 66 views
0

我找到了一個幫助我獲得鬧鐘設置的教程,但在教程中我們使用了日期選擇器來設置鬧鐘的時間。一切進展順利,所以我試圖用我自己的方法替換日期選擇器,然後設置鬧鐘。問題是它似乎沒有工作,當我將該日期設置爲今天時不會彈出警報,但在使用日期選擇器時工作正常。誰能告訴我我做錯了什麼?我通過調試運行這個,我的查詢返回正確的日期,我得到正確的數字和所有,但它似乎並沒有工作。根據數據庫中的日期設置鬧鐘

我希望有人能指出我錯過的東西?

編輯

我打電話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(); 
} 

這是我試圖與

它調用查詢到從我的數據庫獲取特定的日期,也應該設定一個來代替它的方法在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()); 
    } 

} 
+0

你在哪裏調用這個方法'setNotif()'?讓它在按鈕回調中強制UI線程上的動作。是否有可能你在後臺線程,所以敬酒不敬酒? – xbakesx

+0

哦忘了提及。我會把它放在一個編輯中,謝謝。 – Cai

+0

數據庫中的日期是什麼樣的?你確定它是inyyyy-MM-dd格式嗎?你的轉換爲日曆的方法似乎有點奇怪。你在LogCat中獲得什麼? – JonasCz

回答

2

這是一個簡單的路障碰上了,遺憾的是,並沒有真正有什麼與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); 

你就贏了。

+0

我明白了,所以當使用'Calendar'時,將月份加1只是爲了代表一個人類的日期,自然而然地是從人類日期到一個'日曆'日期。非常感謝你的澄清。乾杯! – Cai