2017-08-30 3 views
0

ein Ich füge einen Wert in meine Datenbank um Mitternacht einmal am Tag. Wenn ich meine App neu starte, wird jedoch ein weiterer Eintrag eingefügt. Ich kann nicht meinen Fehler finden:Android: Neustart meiner App fügt einen Datenbankeintrag

Dies ist der Teil des OnReceive Verfahrens ist, das die Methode aufruft, die den Eintrag macht:

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(); 
       } 
      } 

Dies ist die Methode, die tatsächlich den Eintrag macht:

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); 
} 

Die onReceive-Methode wird zur richtigen Zeit aufgerufen, da bin ich mir sicher. Also ich verstehe nicht, warum es diesen Eintrag am Anfang der App macht.

+0

Die Methode addDayCheck wird immer in der onReceive-Methode aufgerufen, die einen neuen Eintrag impliziert. –

+0

Richtig, aber die onReceive-Methode als Ganzes wird nur einmal pro Tag aufgerufen. –

+0

Können Sie den Code einfügen, der die Übertragung auslöst? – iTurki

Antwort

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); 
    } 

Ich würde es auf diese Art und Weise geschehen, indem geprüft wird, wenn der Eintrag von heute wurde bereits hinzugefügt wurde, können Sie diese verbessern, indem geprüft wird, ob es Mitternacht ist und in dem Fall, dass Sie gehen einen neuen Eintrag hinzuzufügen.

Verwandte Themen