Aller au contenu

[Résolu] Récupérer le contenu d'une table depuis un ListArray


jok

Recommended Posts

Bonjour,

J'ai un soucis de récupération de données et j'aurais besoin de votre aide.

Tout d'abord, je parcours ma table T_Personnes (de ma base SQLite) et j'affiche le nom et le prénom de chaque personne dans une listview. Jusque là ça va, mais j'aimerais qu'en tapotant sur le nom d'une personne, j'affiche toutes ses informations (à savoir son nom et son prénom mais aussi son ID, son sexe, etc.) dans une Alert. Pour l'instant, j'arrive bien à récupérer le nom et le prénom mais pas par la bonne méthode : je fais récupère en fait le texte de la listview et non les infos de la table parcourue...

Y a-t-il une possibilité pour avoir ses informations ?

En vous remerciant d'avance, je laisse mon code à la suite pour les courageux.

   // Parcours de la table T_Personnes
   public ArrayList<String> getPersonnes() {
       ArrayList<String> output = new ArrayList<String>();

       String[] colonnes = new String[] { "IDbenef", "Nom", "Prénom", "Sexe" };

       Cursor cursorResults = bdd.query(PERSONNES, colonnes, null, null, null, null, "Nom ASC, 'Prénom' ASC", null);
       if (null != cursorResults) {
           if (cursorResults.moveToFirst()) {
               do {
                   int colnom = cursorResults.getColumnIndex("Nom");
                   int colprenom = cursorResults.getColumnIndex("Prénom");
                   String nomPrenom = cursorResults.getString(colnom) + " " + cursorResults.getString(colprenom);
                   output.add(nomPrenom);
               } while (cursorResults.moveToNext());
           }
       }
       return output;
   } 

// Affichage dans le listview
    BaseSQLite bddConn = new BaseSQLite(this);

    // Adapter qui liste les personnes
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, bddConn.getPersonnes());
       setListAdapter(adapter);

       // Récupère le contenu de la personne sélectionnée pour afficher ses informations
       ListView liste = getListView();
       liste.setTextFilterEnabled(true);

       liste.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       	AlertDialog.Builder alert = new AlertDialog.Builder(L_Personnes.this);
       	// Je mets le titre de l'alert avec le nom de la personne
       	alert.setTitle(((TextView) view).getText());
       	// J'aimerais placer ici les informations de la personne
       	alert.setMessage("?");
       	alert.setPositiveButton("Retour", null);
       	alert.show();
         }
       });

Lien vers le commentaire
Partager sur d’autres sites

Tu peux peut être réouvrir ta BDD et faire un query en passant comme paramètre l'id qui t'est donné dans la méthode OnItemClick.

Pour ça, tu dois avoir créé dans ta classe BaseSQLite une méthode du genre:

public Cursor getPersonne(String rowId) throws SQLException {
       Cursor mCursor =
           mDb.query(false, DATABASE_TABLE, null, KEY_ROWID + "=" + "'"+rowId+"'", null,
                   null, null, null, null);
       if (mCursor != null) {
           mCursor.moveToFirst();
       }
       return mCursor;
   }

(Regarde la doc de la méthode "query" pour spécifier les colonnes que tu veux récupérer ... )

Du coup ton code devient:

 liste.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               AlertDialog.Builder alert = new AlertDialog.Builder(L_Personnes.this);


               // En supposant que tu n'as pas fermé ta BDD:
               Cursor laPersonne = bddConn.getPersonne(id); 
               String sonPrenom = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Prénom"));
               String sonNom = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Nom"));
               String sonSexe = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Sexe"));

               laPersonne.close();

               // Je mets le titre de l'alert avec le nom de la personne
               alert.setTitle(((TextView) view).getText());
               // J'aimerais placer ici les informations de la personne
               alert.setMessage("Nom: " + sonNom + " Prénom: " + sonPrenom + " Sexe: " + sonSexe);
               alert.setPositiveButton("Retour", null);
               alert.show();
         }
       });

J'ai pas testé, mais en gros c'est ça l'idée.

J'espère avoir pu t'aider.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...