IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Objet et base de données


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut Objet et base de données
    Bonjour,
    je débute en android, et j'ai acheter le livre de Nazim Benbourahla sur Android 7.
    Parmi les codes qu'il présente, un m’intéresse particulièrement pour mon projet, c'est l'utilisation de la base sqlite.(Chap 12 de son livre).
    Il créé une classe appelé chapitre, le SQLiteOpenHelper, et une classe agissant sur la base (ajout, update, delete, get).
    J'arrive à faire fonctionner son exemple, que j'ai repris en modifiant les classes (afin de coller à mon projet), et il récupère (moi aussi) correctement la liste total (via un toString) des données de la base.
    Cependant, il donne aussi une méthode pour récupéré un enregistrement de la table.
    Mais, il ne fait pas d'exemple avec, et c'est justement ici que je n'arrive pas à saisir...
    Voici un extrait de son code qui tourne aussi chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public ArrayList<Chapitre> getAllChapters() {
    		Cursor c = bdd.query(TABLE_CHAPITRES, new String[] { COL_ID, COL_NAME,
    				COL_DESC }, null, null, null, null, COL_NAME);
    		if (c.getCount() == 0) {
    			c.close();
    			return null;
    		}
    		ArrayList<Chapitre> chapterList = new ArrayList<Chapitre> ();
    		while (c.moveToNext()) {
    			Chapitre chapter = new Chapitre();
    			chapter.setId(c.getInt(NUM_COL_ID));
    			chapter.setName(c.getString(NUM_COL_NAME));
    			chapter.setDescription(c.getString(NUM_COL_DESC));
    			chapterList.add(chapter);
    		}
    		c.close();
    		return chapterList;
    	}
    Et dans l'activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ArrayList<Chapitre> chapterList = chapitreBdd.getAllChapters();
            chapitreBdd.close();
            ArrayAdapter<Chapitre> adapter = new ArrayAdapter<Chapitre>(this, android.R.layout.simple_list_item_1, chapterList);
            list.setAdapter(adapter);
    Moi, je veux utiliser cette partie de son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public Chapitre getChapter(String name) {
    		Cursor c = bdd.query(TABLE_CHAPITRES, new String[] { COL_ID, COL_NAME,
    				COL_DESC }, COL_NAME + " LIKE \"" + name + "\"", null, null,
    				null, COL_NAME);
    		return cursorToChapter(c);
    	}
     
    	public Chapitre cursorToChapter(Cursor c) {
    		if (c.getCount() == 0) {
    			c.close();
    			return null;
    		}
    		Chapitre chapter = new Chapitre();
    		chapter.setId(c.getInt(NUM_COL_ID));
    		chapter.setName(c.getString(NUM_COL_NAME));
    		chapter.setDescription(c.getString(NUM_COL_DESC));
    		c.close();
    		return chapter;
    	}
    Je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Chapitre chapter = new Chapitre();
    chapter=chapitreBdd.getChapter("Chapitre1");
    TextView tv1=(TextView) findViewById(R.id.textView1);
    tv1.setText(chapter.getName());
    Et là, le drame, l'appli se vautre au démarrage sur mes 2 appareils....
    Je pense que je me goure certainement dans l’utilisation des classes ou autre, mais où ??
    Merci de votre aide, et si Mr Benbourahla passe par là, merci de son aide aussi...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut
    Bon, je vais me répondre à moi même :
    Voici les corrections que j'ai apporté au code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public Chapitre cursorToChapter(Cursor c) {
    		if (c.getCount() == 0) {
    			c.close();
    			return null;
    		}
     
    //Ajout d'un else à la suite du if, reprenant le reste du code de getByName()
    else
    {
    //remise à 0 de la position du curseur 
         c.moveToFirst();
         Chapitre chapter = new Chapitre();
         chapter.setId(c.getInt(NUM_COL_ID));
    ...
    ....
    Maintenant tout fonctionne parfaitement.
    Cela faisait un bail que je me prenais la tête avec ce code !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Inserer les attributs d'un objet en base de donné
    Par philair100 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/10/2010, 20h39
  2. creation d'objets en base de données
    Par coold dans le forum JPA
    Réponses: 3
    Dernier message: 02/02/2010, 11h43
  3. orienté objet avec base de données
    Par abelo dans le forum WinDev
    Réponses: 1
    Dernier message: 05/12/2009, 23h30
  4. Réponses: 9
    Dernier message: 13/09/2007, 17h29
  5. Transformer Objets en Base de données
    Par vain_mich dans le forum JDBC
    Réponses: 2
    Dernier message: 14/05/2007, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo