我每天午夜一次在我的数据库中插入一个值。但是,当我重新启动我的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方法在正确的时间被调用,我确信这一点。 所以我不明白为什么它会在应用程序开始时输入。
答案 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);
}
我会这样做,通过检查今天的条目是否已经添加,您可以通过检查它是否是午夜来改善这一点,在这种情况下,您可以继续添加新条目。