Android:重新启动我的应用程序会插入数据库条目

时间:2017-08-30 23:06:48

标签: android database sqlite

我每天午夜一次在我的数据库中插入一个值。但是,当我重新启动我的App时,它会插入另一个条目。我找不到我的错误:

这是onReceive方法的一部分,它调用创建条目的方法:

if (mTaskList != null && mTaskList.size() > 0) {
                DatabaseHelper mDbHelper = new DatabaseHelper(context);
                Calendar c = Calendar.getInstance();
                c.add(Calendar.DATE, -1);
                SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
                String date = df.format(c.getTime());
                String millisIdentifier;
                int doneState;

                for (int i = 0; i < mTaskList.size(); i++) {
                    millisIdentifier = mTaskList.get(i).getMilliIdentifier();
                    doneState = mTaskList.get(i).getDoneTodayValue();

                    mDbHelper.addDayCheck(millisIdentifier, date, doneState);

                    mTaskList.get(i).shiftDayChecks();
                    mTaskList.get(i).resetTimeLeft();
                }
            }

这是实际进行输入的方法:

public void addDayCheck(String millisIdentifier, String date, int doneState){
    SQLiteDatabase db = getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(COLUMN_DATE, date);
    values.put(COLUMN_DONE_STATE, doneState);

    db.insert(millisIdentifier, null, values);
}

onReceive方法在正确的时间被调用,我确信这一点。 所以我不明白为什么它会在应用程序开始时输入。

1 个答案:

答案 0 :(得分:0)

public void addDayCheck(String millisIdentifier, String date, int doneState) {
        SQLiteDatabase db = getWritableDatabase();
        //read database and return a cursor 
        Cursor cursor;
        //............
        //.............
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            do {
                String olddate = cursor.getString(cursor.getColumnIndex(COLUMN_DATE));
                if (olddate.equals(date))
                    return;
                //You don't have to check if it's midnight again since there's no input matching today
            } while (cursor.moveToNext());
        }
        ContentValues values = new ContentValues();
        values.put(COLUMN_DATE, date);
        values.put(COLUMN_DONE_STATE, doneState);

        db.insert(millisIdentifier, null, values);
    }

我会这样做,通过检查今天的条目是否已经添加,您可以通过检查它是否是午夜来改善这一点,在这种情况下,您可以继续添加新条目。