Aller au contenu

choisir un élément d'une base de donnée a partir d'un Spinner


Recommended Posts

Bonsoir!!!!!

j'ai crée une base de données , dans une des tables y'a deux champs , id et nom de différents clients.

Bon dans une des étapes de mon application je dois choisir un parmis les clients enregistrés dans la base (a partir de son nom bien sur).

je me suis "inspiré " d'un code que j'ai trouvé sur le net (par contre le type travaillait sur l'autocompletion des noms).

j'ai changé un peu ce que j'ai decidé incompatible , et là je me trouve bloqué! a chaque fois que j'appelle la fonction pour affecter la liste des clients au spinner , l'application se bloque, y'a meme pas affichage de l'ecran ou se trouve le Spinner:

je vous laiise decouvrir mon fameux code :D

voila d'abord la fonction qui me renvoi un Arraylist des clients et leurs nom le tout encapsuler dans un arraylist a deux case::

public ArrayList[] renvoi_liste_client() {
       String[] aTableCollonne = new String[] { "nom_Client", "id_Client" };

       // String[] aTableCollonne = new String[] { "nom_Client" };
       Cursor objCursor = mDb.query(CLIENT, aTableCollonne, null, null, null,
               null, null, null);
       int iPostNomchaine = objCursor.getColumnIndex("nom_Client");
       int iPostId = objCursor.getColumnIndex("id_Client");// //////////
       int itotal = objCursor.getCount();
       ArrayList aTableRetourNom = new ArrayList();
       ArrayList aTableRetourId = new ArrayList();
       objCursor.moveToFirst();
       ArrayList[] aTableRetour = new ArrayList[1];

       // ArrayList[] aTableRetour = new ArrayList[1];

       /* Check if our result was valid. */
       if (objCursor != null) {
           if (objCursor.isFirst()) {
               int i = 0;
               do {
                   i++;
                   String resultsring = objCursor.getString(iPostNomchaine);
                   String resultId = objCursor.getString(iPostId);
                   aTableRetourNom.add(resultsring);
                   aTableRetourId.add(resultId);
                   objCursor.moveToNext();
               } while (!objCursor.isLast());
           }
       }

       aTableRetour[0] = aTableRetourNom;
       aTableRetour[1] = aTableRetourId;
       return aTableRetour;

CLIENT reference a la table depuis laquelle je vais recuperer les colonnes (tableClients)

VOILA l'appel de la fonction:

objBD est ma base de donnée (une instance : open pour l'ouvrir et close pour la fermer)

   private ArrayList[] retour_Client;

objBD.open();
this.setContentView(R.layout.newcommande);
           this.retour_Client = objBd.renvoi_liste_client();
           ArrayAdapter adapterII = new ArrayAdapter(this,
                   android.R.layout.simple_dropdown_item_1line,
                   this.retour_Client[0]);

           Spinner listeClient = (Spinner) findViewById(R.id.choixClient);
           listeClient.setAdapter(adapterII);
           objBd.close();

merci beaucoup pour votre aide :)

Lien vers le commentaire
Partager sur d’autres sites

  • 1 month later...
Bonsoir!!!!!

j'ai crée une base de données , dans une des tables y'a deux champs , id et nom de différents clients.

Bon dans une des étapes de mon application je dois choisir un parmis les clients enregistrés dans la base (a partir de son nom bien sur).

je me suis "inspiré " d'un code que j'ai trouvé sur le net (par contre le type travaillait sur l'autocompletion des noms).

j'ai changé un peu ce que j'ai decidé incompatible , et là je me trouve bloqué! a chaque fois que j'appelle la fonction pour affecter la liste des clients au spinner , l'application se bloque, y'a meme pas affichage de l'ecran ou se trouve le Spinner:

je vous laiise decouvrir mon fameux code :D

voila d'abord la fonction qui me renvoi un Arraylist des clients et leurs nom le tout encapsuler dans un arraylist a deux case::

public ArrayList[] renvoi_liste_client() {
       String[] aTableCollonne = new String[] { "nom_Client", "id_Client" };

       // String[] aTableCollonne = new String[] { "nom_Client" };
       Cursor objCursor = mDb.query(CLIENT, aTableCollonne, null, null, null,
               null, null, null);
       int iPostNomchaine = objCursor.getColumnIndex("nom_Client");
       int iPostId = objCursor.getColumnIndex("id_Client");// //////////
       int itotal = objCursor.getCount();
       ArrayList aTableRetourNom = new ArrayList();
       ArrayList aTableRetourId = new ArrayList();
       objCursor.moveToFirst();
       ArrayList[] aTableRetour = new ArrayList[1];

       // ArrayList[] aTableRetour = new ArrayList[1];

       /* Check if our result was valid. */
       if (objCursor != null) {
           if (objCursor.isFirst()) {
               int i = 0;
               do {
                   i++;
                   String resultsring = objCursor.getString(iPostNomchaine);
                   String resultId = objCursor.getString(iPostId);
                   aTableRetourNom.add(resultsring);
                   aTableRetourId.add(resultId);
                   objCursor.moveToNext();
               } while (!objCursor.isLast());
           }
       }

       aTableRetour[0] = aTableRetourNom;
       aTableRetour[1] = aTableRetourId;
       return aTableRetour;

CLIENT reference a la table depuis laquelle je vais recuperer les colonnes (tableClients)

VOILA l'appel de la fonction:

objBD est ma base de donnée (une instance : open pour l'ouvrir et close pour la fermer)

   private ArrayList[] retour_Client;

objBD.open();
this.setContentView(R.layout.newcommande);
           this.retour_Client = objBd.renvoi_liste_client();
           ArrayAdapter adapterII = new ArrayAdapter(this,
                   android.R.layout.simple_dropdown_item_1line,
                   this.retour_Client[0]);

           Spinner listeClient = (Spinner) findViewById(R.id.choixClient);
           listeClient.setAdapter(adapterII);
           objBd.close();

merci beaucoup pour votre aide :)

Rajoute des logs (Log.e("mon text","mon log");

Quand tu dis que l'application se bloque, cela signifie quoi ?

Un problème dans le parsing de ton cursor ?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Tout d'abord, petite précision d'un point de vue logiciel : c'est un peu dommage de faire la vérification que objCursor est différent de nul mais d'utiliser l'objet à coup de objCursor.getCount() ou objCursor.getColumnIndex() ... Tu auras un NullPointerException avant ;)

Deuxio : si tu fais ça : ArrayList[] aTableRetour = new ArrayList[1]; et que tu utilise aTableRetour[1] tu aura un problème également d'index de tableau trop grand. Vu ton code je pense que ce que tu appelle "blocage" est en fait une exception

Tertio : tu peux simplifier ton code avec un truc de ce genre :

while (objCursor.moveToNext()) {
 String resultsring = objCursor.getString(iPostNomchaine);
 String resultId = objCursor.getString(iPostId);
 aTableRetourNom.add(resultsring);
 aTableRetourId.add(resultId);
}

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...