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 :

Enregistrer dans la base des donnees sqlite


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Enregistrer dans la base des donnees sqlite
    Bonjour a tous , je sollicite votre aide ; je dois enregistrer dans la base des données sqlite depuis une liste déroulante récupérer dans une autre table; dans la table ou je souhaite enregistrer j'ai 3 colonnes ; numS, numP, EtatCP ; voici la la creation de la tale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static final String PLOT_CREATE =
                 "CREATE TABLE "
                + TABLE_PLOT + " ("
                     + COLUMN_PLOT_NUMS + " VARCHAR ( 20 ) , "
                     + COLUMN_PLOT_NUMP + " INTEGER ,"
                     + COLUMN_PLOT_ETATCP + " VARCHAR ( 1 ) , "
                     + "primary key (NUMS, NUMP),"
                     + "FOREIGN KEY(NUMS) REFERENCES STATION(NUMS) "
                         + " ); ";
    2. la liste récupérer ;affichée par un spinner (marche) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    final Spinner spinnerStations = (Spinner) findViewById(R.id.spinnerForStations);
     
            ArrayAdapter<String> spinnerStationsAdapter = new ArrayAdapter<>(this,android.R.layout.simple_spinner_item);
     
            for(int i = 0; i< listeStations.size(); i++){
                spinnerStationsAdapter.add(listeStations.get(i).getNomS());
            }
            spinnerStations.setAdapter(spinnerStationsAdapter);
    3.Methode pour enregister :
    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
    public boolean addPlot(int laStation, String etatCP) {       // Ajout d'un enregistrement dans la table
     
            ContentValues values = new ContentValues();
            values.put(DatabaseOpenHelper.COLUMN_PLOT_NUMS, laStation);
            values.put(DatabaseOpenHelper.COLUMN_PLOT_ETATCP, etatCP);
     
            long result = db.insert(DatabaseOpenHelper.TABLE_PLOT, null, values);
     
     
            if (result == -1) {
     
                return false;
            } else return true;
     
        }

    4.Lors de l'enregistrement j'appelle ma methode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    boolean isInserted = plotsAcces.addPlot(Integer.parseInt(spinnerStations.getSelectedItem().toString()),
                            radioChoiceButton.getText().toString());
                    if (isInserted)
     
                        Toast.makeText(AjoutPlotActivity.this, "AJOUTE", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(AjoutPlotActivity.this," NON AJOUTE", Toast.LENGTH_LONG).show();
                }
    le probleme vient de la
    Integer.parseInt(spinnerStations.getSelectedItem().toString()
    car je tente d'enregistrer un type string récupéré dans la liste deroulante (nom) alors que je dois enregistrer le numero (numS) correspondant au nom selectionné dans le champ NUMS de la table en haut.

    j'ai cette erreur lors de l'enregistrement :
    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
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: ppe4.velib, PID: 11682
                      java.lang.NumberFormatException: Invalid int: "TestSave"
                          at java.lang.Integer.invalidInt(Integer.java:138)
                          at java.lang.Integer.parse(Integer.java:410)
                          at java.lang.Integer.parseInt(Integer.java:367)
                          at java.lang.Integer.parseInt(Integer.java:334)
                          at ppe4.velib.Activities.AjoutPlotActivity$1.onClick(AjoutPlotActivity.java:84)
                          at android.view.View.performClick(View.java:5721)
                          at android.widget.TextView.performClick(TextView.java:10930)
                          at android.view.View$PerformClick.run(View.java:22620)
                          at android.os.Handler.handleCallback(Handler.java:739)
                          at android.os.Handler.dispatchMessage(Handler.java:95)
                          at android.os.Looper.loop(Looper.java:148)
                          at android.app.ActivityThread.main(ActivityThread.java:7331)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    comment faire svp ? Merci

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    C'est parce que dans ton spinner tu ne stockes que de simples chaines (les NomS) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spinnerStationsAdapter.add(listeStations.get(i).getNomS());
    Donc il ne faut pas espèrer plus tard que spinnerStations.getSelectedItem() te renvoie autre chose que ces valeurs là...

    Tu est dans le cas (quasi majoritaire) où tu dois stocker des objets (contenants numS, numP, etc) dans ton spinner afin de les récupérer plus tard. Cela nécessite la création d'une véritable classe Plot, ainsi que créer un Adapter spécifique (qui extends ArrayAdapter<Plot>). Ainsi, tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plot selected = (Plot)spinnerStations.getSelectedItem(); Log.i("test", selected.getNumS(););
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    C'est parce que dans ton spinner tu ne stockes que de simples chaines (les NomS) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spinnerStationsAdapter.add(listeStations.get(i).getNomS());
    Donc il ne faut pas espèrer plus tard que spinnerStations.getSelectedItem() te renvoie autre chose que ces valeurs là...

    Tu est dans le cas (quasi majoritaire) où tu dois stocker des objets (contenants numS, numP, etc) dans ton spinner afin de les récupérer plus tard. Cela nécessite la création d'une véritable classe Plot, ainsi que créer un Adapter spécifique (qui extends ArrayAdapter<Plot>). Ainsi, tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plot selected = (Plot)spinnerStations.getSelectedItem(); Log.i("test", selected.getNumS(););

    Bonjour,
    merci pour votre réponse,
    mais je ne vois pas bien pourquoi avoir besoin d'utiliser la classe Plot et un adapter de cette classe alors que la liste des stations qui est affichée dans le spinner grace a la classe 'station' mais pas la classe Plot.

    j'essaye de ceci mais ca ne marche pas ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Station selected = (Station) spinnerStations.getSelectedItem();
                    Log.i("test", selected.getNumS());
                    boolean isInserted = plotsAcces.addPlot(selected.getNumS(), radioChoiceButton.getText().toString());
                    if (isInserted)
     
                        Toast.makeText(AjoutPlotActivity.this, "AJOUTE", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(AjoutPlotActivity.this," NON AJOUTE", Toast.LENGTH_LONG).show();
                }

    et dans mon spinner j'ai un numero et un nom des stations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ArrayAdapter<String> spinnerStationsAdapter = new ArrayAdapter<>(this,android.R.layout.simple_spinner_item);
     
            for(int i = 0; i< listeStations.size(); i++){
                spinnerStationsAdapter.add(listeStations.get(i).getNumS()+"-"+listeStations.get(i).getNomS());
            }
            spinnerStations.setAdapter(spinnerStationsAdapter);
    J'ai une erreur de ce type :
    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
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: ppe4.velib, PID: 23196
                      java.lang.ClassCastException: java.lang.String cannot be cast to ppe4.velib.Metiers.Station
                          at ppe4.velib.Activities.AjoutPlotActivity$1.onClick(AjoutPlotActivity.java:82)
                          at android.view.View.performClick(View.java:5721)
                          at android.widget.TextView.performClick(TextView.java:10930)
                          at android.view.View$PerformClick.run(View.java:22620)
                          at android.os.Handler.handleCallback(Handler.java:739)
                          at android.os.Handler.dispatchMessage(Handler.java:95)
                          at android.os.Looper.loop(Looper.java:148)
                          at android.app.ActivityThread.main(ActivityThread.java:7331)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    I/Process: Sending signal. PID: 23196 SIG: 9

  4. #4
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    regardes ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Station selected = (Station) spinnerStations.getSelectedItem();
    Eric

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    salut,
    regardes ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Station selected = (Station) spinnerStations.getSelectedItem();
    Eric
    Justement c'est ici que je ne comprends pas ."
    "java.lang.ClassCastException: java.lang.String cannot be cast to...."

    Je ne sais pas comment je pourrais résoudre ce problème.
    Aidez moi svp merci

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Parce que c'est le même problème, ton spinner contient de simples String au lieu de véritables objets Station.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayAdapter<Station> spinnerStationsAdapter = new ArrayAdapter<Station>(this,android.R.layout.simple_spinner_item);
             spinnerStationsAdapter.addAll(listeStations);
             spinnerStations.setAdapter(spinnerStationsAdapter);
    L'astuce étant que ta classe Station doit redéfinir la méthode toString comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Station {
     
       //...
     
      @override
      public String toString() {
          return this.getNumS()+"-"+this.getNomS();
      }
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Parce que c'est le même problème, ton spinner contient de simples String au lieu de véritables objets Station.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayAdapter<Station> spinnerStationsAdapter = new ArrayAdapter<Station>(this,android.R.layout.simple_spinner_item);
             spinnerStationsAdapter.addAll(listeStations);
             spinnerStations.setAdapter(spinnerStationsAdapter);
    L'astuce étant que ta classe Station doit redéfinir la méthode toString comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Station {
     
       //...
     
      @override
      public String toString() {
          return this.getNumS()+"-"+this.getNomS();
      }
    }

    Mille mercis ! ça marche , je stockais des simple strings au lieu de stocker l'objet pour le réutiliser plus tard !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Parce que c'est le même problème, ton spinner contient de simples String au lieu de véritables objets Station.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayAdapter<Station> spinnerStationsAdapter = new ArrayAdapter<Station>(this,android.R.layout.simple_spinner_item);
             spinnerStationsAdapter.addAll(listeStations);
             spinnerStations.setAdapter(spinnerStationsAdapter);
    L'astuce étant que ta classe Station doit redéfinir la méthode toString comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Station {
     
       //...
     
      @override
      public String toString() {
          return this.getNumS()+"-"+this.getNomS();
      }
    }





    Bonjour, je reviens vers vous ,
    je suis bloque lors de l'enregistrement j'ai un probleme d'un numero de mon objet (sa table à deux clés primaires ) qui ne s’incrémente pas . j'ai fait une methode pour pouvoir recuperer le dernier numero dans la table PLOT et l'incrementer a chaque fois que je fais un ajout d'un plot.
    voici ma methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public int getDernierNumero(int numS) {
     
            Cursor curseur;
            curseur = db.rawQuery("SELECT MAX(NUMP)FROM PLOT WHERE NUMS =" + numS, null);
     
           curseur.moveToFirst();
                    int nb = curseur.getInt(0);
     
    Log.d("test",nb+"");
            return nb;
        }
    la methode elle marche bien,

    à l'appelle de la methode, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (int i = 0; i < listeStations.size(); i++) {
                spinnerStationsAdapter.addAll(listeStations);
                spinnerStations.setAdapter(spinnerStationsAdapter);
     
            }
     
                    int num = spinnerStations.getSelectedItemPosition();
                    int lastNumP = plotsAcces.getDernierNumero(num);
     
                    final int numPforInsert = lastNumP +1;
    et j'appelle aussi la methode pour enregistrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    boolean isInserted = plotsAcces.addPlot(numPforInsert,selected.getNumS(), radioChoiceButton.getText().toString());
                    if (isInserted)
     
                        Toast.makeText(AjoutPlotActivity.this, "AJOUTE", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(AjoutPlotActivity.this," NON AJOUTE", Toast.LENGTH_LONG).show();
                }

    la table PLOT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static final String PLOT_CREATE =
                 "CREATE TABLE "
                + TABLE_PLOT + " ("
                     + COLUMN_PLOT_NUMS + " INTEGER , "
                     + COLUMN_PLOT_NUMP + " INTEGER , "
                     + COLUMN_PLOT_ETATCP + " VARCHAR ( 5 ) , "
                     + "primary key (NUMS, NUMP),"
                     + "FOREIGN KEY(NUMS) REFERENCES STATION(NUMS) "
                         + " ); ";

    methode pour enregistrer :
    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
    20
    public boolean addPlot(int laStation,int numP,  String etatCP) {       // Ajout d'un enregistrement dans la table
     
            ContentValues values = new ContentValues();
            values.put(DatabaseOpenHelper.COLUMN_PLOT_NUMS, laStation);
            values.put(DatabaseOpenHelper.COLUMN_PLOT_NUMP, numP);
            values.put(DatabaseOpenHelper.COLUMN_PLOT_ETATCP, etatCP);
     
            long result = db.insert(DatabaseOpenHelper.TABLE_PLOT, null, values);
     
     
            if (result == -1) {
     
                return false;
     
            } else
     
                return true;
     
     
        }
    ce qui se passe , l'enregistrement est fait qu'une fois , quand j'ajoute un autre plot pour la meme station , le plot n'est pas enregistrer. quand j'enregistre un plot avec une autre station selectionnée , le numero de plot passe à 2 au lieu de commencer à 1.

    je ne sais pas comment resoudre ce probleme , votre aide s'il vous plait ;

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

Discussions similaires

  1. [Débutant] Enregistrement des infos d'un formulaire dans une base de donnees
    Par cobos dans le forum VB.NET
    Réponses: 5
    Dernier message: 28/04/2015, 21h36
  2. Réponses: 1
    Dernier message: 18/06/2010, 20h50
  3. [Dojo] Afficher les options et stocker dans la base des donnees les valeurs
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 29/11/2009, 17h08
  4. Ouvrir, Enregistrer des textbox dans une base de donnee ( DEBUTANT!)
    Par macfly77 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 01/12/2006, 13h21
  5. Réponses: 6
    Dernier message: 26/09/2005, 10h38

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