nathalie85 Posté(e) 10 janvier 2011 Share Posté(e) 10 janvier 2011 (modifié) Bonjour à tous, Voila j'aimerai afficher dans un formulaire une liste déroulante avec les données d'une table de ma base de donnée, mais malheureusement je n'arrive pas et j'ai beaucoup d'erreurs: cette table pointe vers une autre nommé "type" pour pouvoir donnée des choix du type : Pour récupérer les éléments de ma table "type" je fais un Cursor (dans ma classe DBAdater): public Cursor type(){ Cursor Curseur = bd.query("type", new String[]{ "_id", "type"}, null, null, null, null, null); Curseur.moveToFirst(); return Curseur; } Et dans ma classe ajouter dans laquelle je réalise mon formulaire j'ajoute ce code dans le onCreate(Bundle savedInstanceState): Cursor C = bd_transfert.liste_type(); int id = C.getColumnIndexOrThrow("type"); final Spinner s = (Spinner) findViewById(R.id.Spinner_type_local); ArrayAdapter<String> adapterForSpinner; adapterForSpinner = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_item); s.setAdapter(adapterForSpinner); Et j'ai beaucoup d'erreurs dans mon LogCat: 01-10 17:31:04.917: ERROR/Database(5936): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 01-10 17:31:04.917: ERROR/Database(5936): at android.database.sqlite.SQLiteStatement.native_execute(Native Method) 01-10 17:31:04.917: ERROR/Database(5936): at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55) 01-10 17:31:04.917: ERROR/Database(5936): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549) 01-10 17:31:04.917: ERROR/Database(5936): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) 01-10 17:31:04.917: ERROR/Database(5936): at com.projet.projet.DBAdapter.inserer_local(DBAdapter.java:154) 01-10 17:31:04.917: ERROR/Database(5936): at com.projet.projet.Ajouter_local$1.onClick(Ajouter_local.java:88) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.View.performClick(View.java:2408) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.View.onKeyUp(View.java:4121) 01-10 17:31:04.917: ERROR/Database(5936): at android.widget.TextView.onKeyUp(TextView.java:4431) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.KeyEvent.dispatch(KeyEvent.java:1061) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.View.dispatchKeyEvent(View.java:3740) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788) 01-10 17:31:04.917: ERROR/Database(5936): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667) 01-10 17:31:04.917: ERROR/Database(5936): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102) 01-10 17:31:04.917: ERROR/Database(5936): at android.app.Activity.dispatchKeyEvent(Activity.java:2063) 01-10 17:31:04.917: ERROR/Database(5936): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441) 01-10 17:31:04.917: ERROR/Database(5936): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735) 01-10 17:31:04.917: ERROR/Database(5936): at android.os.Handler.dispatchMessage(Handler.java:99) 01-10 17:31:04.917: ERROR/Database(5936): at android.os.Looper.loop(Looper.java:123) 01-10 17:31:04.917: ERROR/Database(5936): at android.app.ActivityThread.main(ActivityThread.java:4627) 01-10 17:31:04.917: ERROR/Database(5936): at java.lang.reflect.Method.invokeNative(Native Method) 01-10 17:31:04.917: ERROR/Database(5936): at java.lang.reflect.Method.invoke(Method.java:521) 01-10 17:31:04.917: ERROR/Database(5936): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-10 17:31:04.917: ERROR/Database(5936): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-10 17:31:04.917: ERROR/Database(5936): at dalvik.system.NativeStart.main(Native Method) Merci d'avance. Modifié 20 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 10 janvier 2011 Share Posté(e) 10 janvier 2011 Le logcat indique que tu as une contrainte d'intégrité qui n'est pas respectée lors de l'insertion d'un élément dans la table local. Au vu de ton schéma de table, il doit s'agir soit de la colonne id_entreprise, soit de id_type, qui n'est pas renseignée avec une valeur correcte correspondant à un id de la table entreprise (ou type) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 11 janvier 2011 Auteur Share Posté(e) 11 janvier 2011 (modifié) Merci chpil d'avoir pris le temps de répondre. Je vais revoir mes tables et je te tiens informé. Modifié 11 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 12 janvier 2011 Share Posté(e) 12 janvier 2011 (cette réponse fait suite à ce post et cet autre qui concernent tous les deux le même point; la scission en deux posts était inutile, et risque de nuire à la compréhension pour les futurs lecteurs) Il faut que tu passes les bonnes données à ton spinner; tu peux pour cela utiliser un SimpleCursorAdapter. Ensuite, sur le spinner, lors de la validation du formulaire, tu seras capable de récupérer l'id de l'élément sélectionné, et de le passer ensuite à la base pour insertion Dans le onCreate Cursor cursor = bd_transfert.liste_type(); int id = C.getColumnIndexOrThrow("type"); final Spinner spinnerLocal = (Spinner) findViewById(R.id.Spinner_type_local); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, new String[]{ "type"}, new int[]{ android.R.id.text1}); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerLocal.setAdapter(adapter); findViewById(R.id.Btn_valider).setOnClickListener( // le bouton pour valider la saisie new Button.OnClickListener() { public void onClick(View v) { String num_local = Txtnumlocal.getText().toString(); String taille_local = Txttaillelocal.getText().toString(); String batiment = Txtbatiment.getText().toString(); String etage = Txtetage.getText().toString(); String aile = Txtaile.getText().toString(); long id_local = spinnerLocal.getSelectedItemId(); if (id_local == AdapterView.INVALID_ROW_ID) { // Gérer le cas d'erreur où aucune sélection n'a été faite dans le spinner ... } else { bd_transfert.inserer_local(num_local,taille_local,batiment,etage,aile,id_local); //Afficher l'accueil Intent intent = new Intent(Ajouter_local.this,Local.class); Ajouter_local.this.startActivity(intent); } } } ); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 13 janvier 2011 Auteur Share Posté(e) 13 janvier 2011 (modifié) Merci beaucoup chpil pour ton aide précieuse, j'ai essayé ce que tu m'as expliqué et ça marche. Merci encore. Modifié 13 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 13 janvier 2011 Auteur Share Posté(e) 13 janvier 2011 (modifié) Je profite pour te poser une autre question chpil, elle concerne les bases de données aussi donc je peux continuer dans ce post. Ma table Local possède une autre clé étrangère nommée id_entreprise qui fait référence à la table entreprise. pour récupérer ce champs j'ai fait un Cursor dans ma table DBAdapter: public Cursor recupereridentreprise(){ return bd_transfert.query("entreprise", new String[]{ "_id", "_id" },null, null, null, null, null); } Et pour récupérer le champs id_entreprise dans ma classe ajouter_local je fais : Cursor c = bd_transfert.recupereridentreprise(); int id_entreprise = c.getColumnIndexOrThrow("_id"); Ensuite je l'insérer dans la table avec les autres champs: bd_transfert.inserer_local(num_local,taille_local,batiment,etage,aile,id_type, id_entreprise); Le soucis c'est que dans ma table local, le id_entreprise est toujours égal à 1 même si il est égal à 2 ou 3 dans la table entreprise. pourtant le id_entreprise dans la table entreprise est un integer primary key autoincrement donc il change d'une entreprise à une autre. Et vu qu'il n'y a pas d'erreur dans le logcat je ne sais pas du tout c'est quoi le problème. Merci beaucoup d'avance. Modifié 13 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 Le comportement que tu obtiens est logique. Nulle part tu ne fais de sélection de l'entreprise dont tu veux l'id: - tu fais une requête pour récupérer la liste des entreprises (la méthode recupereridentreprise) - tu récupères l'id de la première entreprise (le cursor est positionné par défaut sur le premier résultat de la requête) - tu insères cet id dans ta base => tu références à chaque fois la même entreprise Il te manque un critère de sélection de ton entreprise Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 14 janvier 2011 Auteur Share Posté(e) 14 janvier 2011 Bonjour chpil, merci encore une fois d'avoir répondu, Qu'est ce que tu veux dire par un autre critère de sélection, est ce que par exemple je dois récupérer le nom de l'entreprise aussi ?? (désolée je suis vraiment débutante!!) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 Ce que je veux dire, c'est quel est le critère de sélection de l'entreprise que tu veux référencer (via son id) dans la table local ? Tu as plusieurs entreprises dans la table entreprise, il faut bien que tu précises celle que tu sélectionnes. C'est une question purement fonctionnelle, pas technique. Seule toi a la réponse. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 14 janvier 2011 Auteur Share Posté(e) 14 janvier 2011 En fait moi j'ai une listeview avec les entreprises que j'ai en base de donnée, en cliquant sur l'entreprise je peux créer un nouveau local ou retrouver les locaux qui appartiennent à cette entreprise.Donc je pense que le critère est la sélection dans ma listeview, qu'est que tu en penses?? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 Lorsque tu sélectionnes ton entreprise (dans l'Activity précédente je présume), il faut que tu récupères l'id de ladite entreprise, pour la passer en paramètre à l'Activity de saisie d'un local (utilise putExtra/getLongExtra sur la classe Intent pour ce faire). Pas besoin de réaccéder à la base de données pour récupérer les informations sur l'entreprise lors de l'enregistrement du local Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 14 janvier 2011 Auteur Share Posté(e) 14 janvier 2011 (modifié) D'accord je vais essayer et je te dirai si ça marche. Modifié 14 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 14 janvier 2011 Auteur Share Posté(e) 14 janvier 2011 (modifié) J'ai essayé ce que tu m'as dit mais ça ne marche pas. Si j'ai bien compris dans ma classe Ajouter_entreprise j'ai récupéré l'id en utilisant le cursor et j'ai utilisé le putExtra Et dans ma classe Ajouter_local j'ai ajouté un intent avant l'insertion des données dans la base de donnée: Dans ma table il donne à l'id la valeur du long défault value à chaque fois. Modifié 17 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 Ouh là, tu mélanges tout là... J'ai l'impression qu'il te manque un certain nombre de notions de base de la conception d'appli pour Android. Tu devrais te pencher sur quelques tutoriaux, lire un bon bouquin (cherche dans le forum ou sur le wiki Frandroid, il y a quelques références) Pour répondre quand même à ta question, un Intent peut servir à décrire l'Activity que l'on souhaite appeler, lui passer des paramètres, ... Cet Intent 'voyage' entre l'Acitivty appelante et l'Activity appelée. Dans ton code, tu appelles putExtra après avoir appelé startActivity, ce qui ne sert à rien, l'Activity ayant été déjà appelée. Et dans ajouter_local, il ne faut pas créer un nouvel Intent, mais récupérer celui qui a servi à appeler l'Activity (via getIntent) Dans Ajouter_entreprise long id_entreprise = bd_transfert.inserer_entreprise(nom_entreprise,......); // inserer_entreprise doit retourner l'id de l'entreprise nouvellement créée Intent intent = new Intent(Ajouter_Entreprise.this,Main.class); intent.putExtra("id_entreprise", id_entreprise); Ajouter_Entreprise.this.startActivity(intent); et dans Ajouter_local, dans le onCreate id_entreprise = getIntent().getLongExtra("id_entreprise"); // id_entreprise est un attribut de Ajouter_local, pour pouvoir le référencer ensuite lors de l'insertion du local Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 14 janvier 2011 Auteur Share Posté(e) 14 janvier 2011 j'ai essayé ce que tu m'as expliqué ça n'a rien changé l'id est toujours à 1, sauf que la à chaque fois que je crée une entreprise il me la crée en double dans la base de donnée. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 janvier 2011 Share Posté(e) 14 janvier 2011 Si tu as une insertion en double en base, c'est un autre problème, c'est que tu dois appeler en double l'insertion. Pour ce qui est de récupérer la bonne valeur d'id de l'entreprise, as-tu vérifié (au debugger / avec des logs) ce que te retournait bd_transfert.inserer_entreprise ? ce que tu passais à l'Intent ? ce que tu récupérais sur l'Intent dans Ajouter_local.onCreate ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
debutant76 Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 Salut je reviens vers toi dans la bonne discussion cette fois. Si j'ai bien compris sur le même écran tu as 1°) le spiner qui indique les articles 2°) une table déroulante qui montre les articles sélectionnés de la base de données. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 31 janvier 2011 Auteur Share Posté(e) 31 janvier 2011 (modifié) Spinner est une liste déroulante, dans mon cas elle montre les champs d'une table de ma base de données. Modifié 31 janvier 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
debutant76 Posté(e) 31 janvier 2011 Share Posté(e) 31 janvier 2011 Et peux tu par ce formulaire, modifier des éléments des enregistrements de la base :unsure: ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
souadkhel Posté(e) 15 mars 2015 Share Posté(e) 15 mars 2015 (modifié) Bonjour a tous, j'ai une question concernant les spinners si c'est possible de me répondre!! voila, je suis debutante en développement et je travaille sur une application android je vais expliquer plus en détails mon cas: j'ai deux tables en base de donnée, client et secteur la table client (code client, nom, adresse, telephone, email, secteur) >> le champ "secteur" dans cette table est le foreign key de (code secteur) dans la table secteur. la table secteur(code secteur, designation secteur) mon anterface graphique est une fiche client qui permet d'ajouter, supprimer, modifier, récupérer un client grace a son id, afficher la liste des clients. dans ma fiche: le code client, nom, adresse, tel, email sont des editText, et le secteur est un spinner où je récupére tous les secteur de la table secteur (les designations). mon souci est que quand je veux consulter les données d'un client a l'aide de son "code" , je récupére toutes ses données dans les editText mais dans le spinner, je ne sais pa comment faire pour qu'il me récupére la designation secteur correspondante. merci Modifié 15 mars 2015 par souadkhel Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
souadkhel Posté(e) 15 mars 2015 Share Posté(e) 15 mars 2015 bonjour, je souhaite recuperer une donnée que j'ai inserer dans la base de donnée partir d'un spinner je fais comment?? aidez moi svp Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.