簡體   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