Difficulté pour supprimer une ligne dans ma listview sqlite
Résolu
rapidegoyes
Messages postés
138
Date d'inscription
Statut
Membre
Dernière intervention
-
rapidegoyes Messages postés 138 Date d'inscription Statut Membre Dernière intervention -
rapidegoyes Messages postés 138 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Malgré toutes mes recherches je n'arrive pas à supprimer un enregistrement dans ma listView avec SQLite.
J'ai mis en place un écouteur sur ma listView et je dispose de 2 fonctions que j'essaye d'appeler sans succès.
Ci-joint une partie de mon code concerné.
J'ai une fonction qui me renvoie la position d'un enregistrement là aucun problème ça marche.
C'est ma deuxième fonction qui pose problème, celle d'un onItemLongClick,
c'est elle qui devrait supprimer ma ligne en faisant appel à l'une des 2 fonctions citées à la fin de ce post.
Mon fichier:
voiListDB.java
Les deux fonctions que j'essaye d'appeler
Merci de bien vouloir m'épauler
cordialement
rapidegoyes
Malgré toutes mes recherches je n'arrive pas à supprimer un enregistrement dans ma listView avec SQLite.
J'ai mis en place un écouteur sur ma listView et je dispose de 2 fonctions que j'essaye d'appeler sans succès.
Ci-joint une partie de mon code concerné.
J'ai une fonction qui me renvoie la position d'un enregistrement là aucun problème ça marche.
C'est ma deuxième fonction qui pose problème, celle d'un onItemLongClick,
c'est elle qui devrait supprimer ma ligne en faisant appel à l'une des 2 fonctions citées à la fin de ce post.
Mon fichier:
voiListDB.java
package com.example.sqlitedatabase; import android.app.AlertDialog; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.database.Cursor; import android.widget.SimpleCursorAdapter; import static android.widget.AdapterView.*; public class voirListeDB extends Activity implements OnItemClickListener, OnItemLongClickListener { SQLiteDataBaseHelper db; // déclaration de l'objet db protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.maliste); db = new SQLiteDataBaseHelper(this); ListView lv = this.findViewById(R.id.maliste); lv.setOnItemClickListener(this); //permet l'affichage du click sur ligne lv.setOnItemLongClickListener(this);//permet la suppression par click sur ligne //appel de la méthode crerColonne Cursor data = db.crerColonne();//appel de la méthode pour obtenir l'allias _id // création de l'objet SimpleCursorAdapter... SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row_item, data,new String [] {"TYPE", "NOM", "ETAT", "NOMBRE","ENDROIT"}, new int[] {R.id.textViewCol1, R.id.textViewCol2, R.id.textViewCol3, R.id.textViewCol4, R.id.textViewCol5}); lv.setAdapter(adapter); } //fin de onCreate //@Override //fonction pour affichage de la boîte message public void onItemClick(AdapterView<?> parent,View view, int position, long id) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Produit à suprimer"); builder.setMessage("Vous avez cliqué sur : " + position ); builder.setPositiveButton("Oui",null ); builder.show(); } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { new OnClickListener() { @Override public void onClick(View v) { db.supprime_ligne(); } }; return true; } } //fin de la classe voirListeDB
Les deux fonctions que j'essaye d'appeler
public void supprime_ligne(){ SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("delete from "+ TABLE_NAME, new String[]{"Id=?"}); }
public void deleteData(){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_NAME, "ID = ?", new String[]{}); }
Merci de bien vouloir m'épauler
cordialement
rapidegoyes
Configuration: Windows / Firefox 76.0
A voir également:
- Difficulté pour supprimer une ligne dans ma listview sqlite
- Supprimer rond bleu whatsapp - Guide
- Supprimer une page dans word - Guide
- Partager photos en ligne - Guide
- Comment supprimer une application préinstallée sur android - Guide
- Supprimer pub youtube - Accueil - Streaming
3 réponses
Il y a un souci dans ta méthode de suppression. Il faut que tu passes un id dans ta requête. 2 possibilités :
Passer par la méthode
Ou une requête
Passer par la méthode
delete()
public void supprime_ligne(Integer id) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_NAME, "id = ? ", new String[]{Integer.toString(id)}); }
Ou une requête
public void supprime_ligne(Integer id) { SQLiteDatabase db = this.getWritableDatabase(); String s = "DELETE FROM " + TABLE_NAME + " WHERE id=" + id; db.execSQL(s); }
Hello,
Dans ton
Dans ton
onItemLongClick(), tu redéfinis un
onClickListener(). Tu devrais plutôt appeler tes méthodes, non ?
Bonjour
Merci de m'épauler.
J'ai modifié ma fonction onItemLongClick()
Mais rien n'y fait je n'arrive pas à supprimer une ligne dans ma listview.
Je viens de faire un essai avec appel de fonction, dès que j'exécute un longclick mon appli se bloque
voici le message d'erreur
Je m'explique l'appel de la fonction supprime_ligne() provoque l'erreur!
Tandis qu'avec la fonction deleteData() il n'y a aucune réaction au click long !
Si je supprime des arguments à la fonction j'ai plein d'erreurs !
Je ne vois pas quels arguments supprimer et où !
Voici la modif
a +++ rapidego
Merci de m'épauler.
J'ai modifié ma fonction onItemLongClick()
Mais rien n'y fait je n'arrive pas à supprimer une ligne dans ma listview.
Je viens de faire un essai avec appel de fonction, dès que j'exécute un longclick mon appli se bloque
voici le message d'erreur
Je m'explique l'appel de la fonction supprime_ligne() provoque l'erreur!
Tandis qu'avec la fonction deleteData() il n'y a aucune réaction au click long !
Si je supprime des arguments à la fonction j'ai plein d'erreurs !
Je ne vois pas quels arguments supprimer et où !
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sqlitedatabase, PID: 7202
java.lang.IllegalArgumentException: Too many bind arguments. 1 arguments were provided but the statement needs 0 arguments
Voici la modif
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
db.supprime_ligne();
return false;
}
a +++ rapidego
Il faut que tu passes un ID en paramètre de ta fonction
Sinon, je ne comprends pas comment elle fonctionne.
Attention toutefois : il est dangereux de supprimer l'item sur lequel tu fais un longClick. Il vaut mieux intercaler une dialog de confirmation. Sinon, tu supprimes l'item, mais ton doigt reste sur l'écran, donc tu risques de supprimer l'item suivant, etc.
supprime_ligne(), non ?
Sinon, je ne comprends pas comment elle fonctionne.
Attention toutefois : il est dangereux de supprimer l'item sur lequel tu fais un longClick. Il vaut mieux intercaler une dialog de confirmation. Sinon, tu supprimes l'item, mais ton doigt reste sur l'écran, donc tu risques de supprimer l'item suivant, etc.
Bonsoir,
J'ai mis un paramètre mais j'ai toujours un blocage de mon programme.
Il m'affiche aucune erreur l'appli démarre et se bloque seulement lorsque je clique long sur l'item
voici mes modifs
voici le message d'erreur
java.lang.IllegalArgumentException: Too many bind arguments. 1 arguments were provided but the statement needs 0 arguments.
cordialement
rapidego
J'ai mis un paramètre mais j'ai toujours un blocage de mon programme.
Il m'affiche aucune erreur l'appli démarre et se bloque seulement lorsque je clique long sur l'item
voici mes modifs
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
db.supprime_ligne(id);
return true;
}
public void supprime_ligne(long id){
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL( "delete from " + TABLE_NAME, new String[]{"id=?"});
}
voici le message d'erreur
java.lang.IllegalArgumentException: Too many bind arguments. 1 arguments were provided but the statement needs 0 arguments.
cordialement
rapidego
Un grand merci pour ton aide plus aucun problème.
Il y avait bien un problème avec ma méthode.
Je fais un clic long et après ré-affichage de la vue l'enregistrement et bel et bien supprimé.
Grace à ton aide je vais enfin pouvoir continuer mon appli.
J'ai complété le code avec ta méthode delete.
Encore mille fois merci et à plus
cordialement
rapidegoyes