1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Records auf Datenbank eindeutig identifizieren

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von FireRider, 14.12.2010.

  1. FireRider, 14.12.2010 #1
    FireRider

    FireRider Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    6
    Registriert seit:
    27.09.2010
    Moin Leute

    Ich hab ein Problem und zwar hab ich eine ListView mit unbekannter Anzahl Einträge (Benutzer fügt sie selbst hinzu) und eine Datenbank (mit einer ID als Primary Key, autoincrement).
    Die Einträge kann man auch löschen, allerdings weiss ich nicht wie genau.
    Im moment mache ich es mit
    Code:
    myDB.execSQL("DELETE FROM " + TABLE_NAME + " WHERE titel = '" + titel + "';");
    Aber das löscht eben alle mit dem gleichen Titel.
    Ich habe es probiert mit der ID vom OnItemLongClickListener, aber die bringt nix, da die nachrückt wenn man in der ArrayList n Item löscht.

    Bsp:
    DB-ID's = 0, 1, 2, 3, 4
    ListView-ID's = 0, 1, 2, 3, 4

    Dann lösche ich Record Nummer 3 (ID 2)

    DB-ID's = 0, 1, 3, 4
    ListView-ID's = 0, 1, 2, 3, 4

    Weiss jemand wie man das lösen kann?

    Gruss, FireRider
     
  2. Lilithian, 15.12.2010 #2
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Sind die Daten als Text im ListView oder machst du das mit einem SQLiteCursor? Wenn du es mit einem Cursor machst, kannst du dir über den Cursor die ID des Datenbankeintrags holen und diesen dann löschen.
     
  3. FireRider, 15.12.2010 #3
    FireRider

    FireRider Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    6
    Registriert seit:
    27.09.2010
    Ich lese die Daten mit einem Cursor in eine ArrayList ein, die ich dann über einen ArrayAdapter an die ListView binde.
    Ich verstehe jetzt nicht genau wie du das meinst, müsste ich dann beim OnItemSelectedListener die Tabelle noch mal durchlaufen oder wie?
     
  4. Lilithian, 15.12.2010 #4
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Wenn mich nicht alles täuscht gibt es doch auch sowas wie einen Cursoradapter für die ListView?

    Ja, gibt es. ^^
    CursorAdapter | Android Developers

    Wenn du den benutzen würdest, hättest du in jedem ListView Eintrag quasi einen Cursor drin, der auch die ID und alles enthält.
    Eine andere Möglichkeit wäre es, in der ArrayList die ID mit zu übergeben und die dann irgendwo unsichtbar in einem View abzuspeichern (im Tag oder unsichtbares Textfeld), die Möglichkeit ist aber nicht besonders schön wie ich finde und der CursorAdapter ist ja extra dafür da. ;)

    Beim Cursoradapter steht sogar bei "The Cursor must include a column named "_id" or this class will not work.", also wirst du da auch wohl problemlos auf die ID zugreifen können um den richtigen Eintrag zu löschen.
     
    FireRider bedankt sich.
  5. FireRider, 15.12.2010 #5
    FireRider

    FireRider Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    6
    Registriert seit:
    27.09.2010
    Danke :D
    Werde ich heute mal probieren :)
     
  6. enrem, 17.12.2010 #6
    enrem

    enrem Erfahrener Benutzer

    Beiträge:
    188
    Erhaltene Danke:
    13
    Registriert seit:
    17.01.2010
    Versuch es sonst mal nach dem löschen mit einem requery auf die Datenbank bzw. Cursor. Die ListView sollte danch ebenfalls benachrichtigt werden und sich aktualisieren.
     
  7. FireRider, 21.12.2010 #7
    FireRider

    FireRider Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    6
    Registriert seit:
    27.09.2010
    Moin

    Habe es mit einem SimpleCursorAdapter probiert (auch mit ein paar Tutorials aus dem Inet) aber irgendwie hänge ich da noch.
    Mein jetziger Code sieht so aus (Noch ohne SimpleCursorAdapter):
    Code:
    ListView LV;
    List<CharSequence> List = new ArrayList<CharSequence>();
    ArrayAdapter<CharSequence> adapt = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_1,List);
    
    ....
    
    List.clear();
        	
    Cursor cur = myDB.rawQuery("SELECT _id,name FROM " + TABLE_NAME + ";",null);
    int Column = cur.getColumnIndex("name");
        	
    if (cur != null) {
        	if (cur.moveToFirst()) {
        		do {
        			String Name = cur.getString(Column);
            		List.add(Name);
        		} while (cur.moveToNext());
        			
        	}
            LV.setAdapter(adapt);
        }
     

Diese Seite empfehlen