1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. DoctorBlack, 20.06.2018 #1
    DoctorBlack

    DoctorBlack Threadstarter Neuer Benutzer

    public int loescheFach(long id){
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete("Fach_table","FACHID=?", new String[]{String.valueOf(id)});
    }
    Hallo,

    ich habe eine normale Datenbank mit SQLite erstellt. Über einen Button lasse ich die Daten dann in einer ListVIew anzeigen. Jetzt möchte ich die Daten aus der ListView bzw. aus der Datenbank löschen, also so, dass wenn ich ein Item in der ListVIew z.B. länger gedrückt halt, sowohl aus der ListView als auch aus der Datenbank gelöscht wird. Ich hab das schon mit einem OnItemLongClickListener probiert, leider will das nicht so ganz funktionieren. Danke schon mal für die Hilfe im Voraus :)

    Hier einmal die Klasse zum Anzeigen in der ListVIew:

    public class ZeigeFaecherListe extends AppCompatActivity {

    DatabaseHelper myDb;
    Cursor res;
    ListView listViewFaecher;


    @override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.zeige_faecher);

    myDb = new DatabaseHelper(this);
    ListView listViewFaecher = (ListView) findViewById(R.id.listViewFaecher);

    ArrayList<String> faecherListe = new ArrayList<>();
    res = myDb.zeigeFaecher();





    if (res.getCount() == 0){
    Toast.makeText(ZeigeFaecherListe.this, "Keine Fächer gefunden", Toast.LENGTH_LONG).show();
    } else {
    while (res.moveToNext()){
    faecherListe.add(res.getString(1));
    ListAdapter fachListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, faecherListe);
    listViewFaecher.setAdapter(fachListAdapter);
    }
    }

    listViewFaecher.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
    myDb.loescheFach(position);
    return true;
    }
    });
    }
    }

    Und hier noch die Methode zum Löschen des EIntrags:
    public int loescheFach(long id){
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete("Fach_table","FACHID=?", new String[]{String.valueOf(id)});
    }


     
  2. jogimuc, 20.06.2018 #2
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo
    um einen Eintrag in der DB zu löschen brauchst du die ID des Datensatzes. Die kannst du dir bestimmt aus dem Cursor holen.

    >public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
    myDb.loescheFach(position);

    Hier übergibst du die Position der Liste damit kann die DB nichts anfangen auch die übergebene ID „long id“ ist die falsche . Du brauchst die Id des Datensatzes unter dem der Eintrag in der DB gespeichert ist. Normaler weise wird in einer Tabelle die ID als erster Eintrag gespeichert wie das bei dir ist kann ich nicht sehen.
    Um die Id zu bekommen benutze deinen Cursor "res" setze ihn auf die Position die dir übergeben wird und lese den Datensatz aus und somit auch die id.


    Nach dem löschen list du die Daten neu aus der DB aus in deine Liste, Adapter und zeigst sie neu an.
     
    Zuletzt bearbeitet: 21.06.2018
  3. DoctorBlack, 24.06.2018 #3
    DoctorBlack

    DoctorBlack Threadstarter Neuer Benutzer

    Ich hab mich mit dem Thema Cursor noch nicht wirklich beschäftigt, kannst du mir da vielleicht ein bisschen auf die Sprünge helfen?

    Ich hab hier nochmal mein Projekt auf GitHub verlinkt wenn das weiter hilft: JDR3/Stundenplan
     
  4. jogimuc, 24.06.2018 #4
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo habe mir den Projekt von github geClonet.
    hier der geänderte Code

    public class ZeigeFaecherListe extends AppCompatActivity {


    SQLiteDatabase db;
    DatabaseHelper myDb;
    Cursor res;
    ListView listViewFaecher;
    private AlertDialog.Builder build;
    ArrayList<String> faecherListe = new ArrayList<>();


    @override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.zeige_faecher);


    myDb = new DatabaseHelper(this);
    listViewFaecher = (ListView) findViewById(R.id.listViewFaecher);


    zeigeListe();

    listViewFaecher.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long id) {
    build = new AlertDialog.Builder(ZeigeFaecherListe.this);
    build.setTitle("Fach löschen?" + faecherListe.get(position));
    build.setMessage("Willst du das Fach wirklich löschen?");

    build.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
    @override
    public void onClick(DialogInterface dialogInterface, int i) {
    dialogInterface.cancel();
    }
    });

    build.setPositiveButton("Löschen", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialogInterface, int i) {

    res.moveToPosition(position);
    // myDb.loescheFach(res.getString(1));
    myDb.loescheFach(res.getLong(0));

    Toast.makeText(getApplicationContext(), faecherListe.get(position) + " gelöscht.", Toast.LENGTH_LONG).show();
    myDb.zeigeFaecher();
    dialogInterface.cancel();
    zeigeListe();

    }
    });

    AlertDialog alert = build.create();
    alert.show();

    return true;
    }
    });





    }

    public void zeigeListe(){

    res = myDb.zeigeFaecher();
    faecherListe.clear();
    if (res.getCount() == 0){
    Toast.makeText(ZeigeFaecherListe.this, "Keine Fächer gefunden", Toast.LENGTH_LONG).show();
    } else {
    while (res.moveToNext()){
    faecherListe.add(res.getString(1));

    }
    ListAdapter fachListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, faecherListe);
    listViewFaecher.setAdapter(fachListAdapter);
    }



    }

    }

    in der DBHelperklasse habe ich auch was geändert.

    public int loescheFach(String fach) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(TABLE_NAME, FACH_NAME+"=?", new String[]{fach});

    }

    public int loescheFach(long id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(TABLE_NAME, FACH_ID+"=?", new String[]{String.valueOf(id)});

    }

    solte nun gehen.
     
  5. DoctorBlack, 24.06.2018 #5
    DoctorBlack

    DoctorBlack Threadstarter Neuer Benutzer

    Hallo,

    hat funktioniert. Dickes Dankeschön :biggrin:

    Hast mir echt weiter geholfen!
     
  6. jogimuc, 25.06.2018 #6
    jogimuc

    jogimuc Erfahrener Benutzer

    Bitte , ich hoffe du verstehst warum ich mansches verändert habe. Hauptsächlich lag es an der löschmethode im helper.
    Nun hast du zwei und kannst entscheiden ob du nach id oder dem String Fach löschst.
    Beim String werden alle die den gleichen String haben gelöscht. Denn es kann sein das das Fach gleich ist aber die anderen Daten nicht die würden dann auch mit gelöscht werden.
    Bei id ist es immer nur ein Datensatz denn es gibt die Id nur ein mal in der Tabelle.
    -- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
    Hi mal eine Frage.
    Warum machst du das mit den konstanten für die Tabelle. Ich persönlich komme damit durch einander.
    In deiner löschmethode war das auch so. Die meisten tutorial gehen von strings aus.
    Da wirst du auch durcheinander gekommen sein.
     
    DoctorBlack bedankt sich.
  7. DoctorBlack, 26.06.2018 #7
    DoctorBlack

    DoctorBlack Threadstarter Neuer Benutzer

    Ich kann dann in den ganzen Lösch- und Speicher-Methoden die Variabelnamen aufrufen, dachte das wäre so geschickter, habe das alles nach einem Tutorial gemacht.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Hilfestellung Appentwicklung Android App Entwicklung 29.09.2018
ListView mit eigenem Layout zeigt im Querformat Items doppelt an Android App Entwicklung 24.06.2018
Android Studio: Auf Datenbank mit zwei Spinner zugreifen. Android App Entwicklung 07.06.2018
SQLite Datenbank mit zwei Tabellen erstellen Android App Entwicklung 30.05.2018
Was am besten für eine Datenbank benutzen? Android App Entwicklung 26.02.2018
Sensible Daten löschen bei Diebstahl Android App Entwicklung 18.02.2018
Eigene Web DB für App Inventor Android App Entwicklung 10.02.2018
ListView: fehler android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 Android App Entwicklung 11.01.2018
Spinner item in Datenbank schreiben mysql Android App Entwicklung 23.12.2017
Du betrachtest das Thema "Eintrag in einer Datenbank mithilfe einer ListView löschen" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.