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

Composants graphiques Android Discussion :

Base de données - filtre à l'aide d'un Spinner


Sujet :

Composants graphiques Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Base de données - filtre à l'aide d'un Spinner
    Bonjour à tous,

    je fait appel à vous car je suis coincé sur un de mes codes :

    Je cherche à faire un filtre sur ma base de données en fonction de la valeur d'un spinner.

    J'ai réussi à faire ce filtre avec des variables intégrées directement dans le code java :

    Code java : 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
    	public List<Bibliotheque> GetLivre() {
    
    		String annee = "2012";
    		
    		// Récupération des livres en fonction de l'année et du type
    		Cursor cursor = maBDD.query(BibliothequeOpenHelper.BIBLIOTHEQUE_TABLE_NAME,
    				new String[] { BibliothequeOpenHelper.COLUMN_ID,
    						BibliothequeOpenHelper.COLUMN_LIVRE,
    						BibliothequeOpenHelper.COLUMN_AUTEUR,
    						BibliothequeOpenHelper.COLUMN_ANNEE,
    						BibliothequeOpenHelper.COLUMN_TYPE},
    						BibliothequeOpenHelper.COLUMN_ANNEE + "=?" + " and "
    						 + BibliothequeOpenHelper.COLUMN_TYPE + "=?", new String[] {annee, "roman"},
    						null, null, null);
    	
    		return ConvertCursorToListObject(cursor);
    	}

    Grâce au code ci-dessus (dans mon fichier BilbliothequeRepository.java), j'arrive bien à retourner le filtre en fonction des infos que j’intègre directement dans le code.


    Maintenant, j'ai fait une activité à part où j'ai intégré deux spinners. J'aimerai faire un filtre sur la base de données en fonction de la sélection du spinner.

    J'ai essayé quelque chose de ce type :

    Code java : 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 List<Bibliotheque> GetLivre() {
    
    		//String annee = "2012";
    		String spinner = String.valueOf(spinner2.getSelectedItem());
    		
    		// Récupération des livres en fonction de l'année et du type
    		Cursor cursor = maBDD.query(BibliothequeOpenHelper.BIBLIOTHEQUE_TABLE_NAME,
    				new String[] { BibliothequeOpenHelper.COLUMN_ID,
    						BibliothequeOpenHelper.COLUMN_LIVRE,
    						BibliothequeOpenHelper.COLUMN_AUTEUR,
    						BibliothequeOpenHelper.COLUMN_ANNEE,
    						BibliothequeOpenHelper.COLUMN_TYPE},
    						BibliothequeOpenHelper.COLUMN_ANNEE + "=?" + " and "
    						 + BibliothequeOpenHelper.COLUMN_TYPE + "=?", new String[] {spinner, "roman"},
    						null, null, null);
    	
    		return ConvertCursorToListObject(cursor);
    	}
    -> Et donc avec ça, ça ne fonctionne pas.

    Auriez-vous une solution ? Pouvez-vous me guider pour réaliser cette fonctionnalité ?

    Merci d'avance.

    Codialement

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    -> Et donc avec ça, ça ne fonctionne pas.
    C'est à dire "ça ne fonctionne pas" ?
    Ça crash ?
    La liste est vide ?
    La liste n'est pas filtrée ?

    Quelle est la valeur de "spinner" ?
    Quelle est la valeur renvoyée par "spinner2.getSelectedItem())" ? (type?)

    Attention aux noms de fonction: Le nom d'une fonction devrait toujours commencer par une minuscule... Seules les constantes et noms de types peuvent commencer par une majuscule.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Salut,

    L'application crash.

    Le spinner contient des valeur d'année (2012, 2011...). Ce que je veux c'est donc filtrer sur la bibliothèque les livres d'une année x grâce au spinner.

    En tout cas merci pour cette réponse.

    Voici le LogCat :

    09-20 08:33:28.709: W/dalvikvm(856): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
    09-20 08:33:28.969: E/AndroidRuntime(856): FATAL EXCEPTION: main
    09-20 08:33:28.969: E/AndroidRuntime(856): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.proto1/com.example.proto1.Selection}: java.lang.NullPointerException
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread.access$600(ActivityThread.java:141)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.os.Handler.dispatchMessage(Handler.java:99)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.os.Looper.loop(Looper.java:137)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread.main(ActivityThread.java:5041)
    09-20 08:33:28.969: E/AndroidRuntime(856): at java.lang.reflect.Method.invokeNative(Native Method)
    09-20 08:33:28.969: E/AndroidRuntime(856): at java.lang.reflect.Method.invoke(Method.java:511)
    09-20 08:33:28.969: E/AndroidRuntime(856): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    09-20 08:33:28.969: E/AndroidRuntime(856): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    09-20 08:33:28.969: E/AndroidRuntime(856): at dalvik.system.NativeStart.main(Native Method)
    09-20 08:33:28.969: E/AndroidRuntime(856): Caused by: java.lang.NullPointerException
    09-20 08:33:28.969: E/AndroidRuntime(856): at com.example.proto1.VetementRepository.GetJean(VetementRepository.java:80)
    09-20 08:33:28.969: E/AndroidRuntime(856): at com.example.proto1.Selection.onCreate(Selection.java:24)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.Activity.performCreate(Activity.java:5104)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    09-20 08:33:28.969: E/AndroidRuntime(856): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    09-20 08:33:28.969: E/AndroidRuntime(856): ... 11 more

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il suffit donc de lire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Caused by: java.lang.NullPointerException
    09-20 08:33:28.969: E/AndroidRuntime(856): at com.example.proto1.VetementRepository.GetJean(VetementRepository.java:80)
    Fichier VetementRepository.java, ligne 80, dans la fonction GetJean (attention aux noms !!!) de la classe VetementRepository

    Il y a une utilisation d'une référence nulle.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Donc si je comprend bien c'est la valeur renvoyée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String spinner = String.valueOf(spinner2.getSelectedItem());
    qui est nulle ?

    Je précise, le spinner2 est à la base sur une autre activité.

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    oO

    Comment peux tu partager une view d'une activité à une autre... outre les problèmes de mémoire que cela peut engendrer, une activité DOIT être self-contained (c'est à dire capable de se débrouiller seule).

    Pourquoi ne pas passer la VALEUR du spinner2 de l'activité précédente à celle-ci ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    C'est exactement ce que je cherche à faire.

    Est-ce que c'est compliqué à faire ?

    Voilà ce que j'ai testé :
    -> Sur l'activité où je souhaite récupérer une valeur (une simple chaine de caractère ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void onClick(View v) {
     
    		  Intent t = new Intent(Spin.this, VetementRepository.class);
    			String texte = "test de transfert";
    			t.putExtra("label",texte); 
    	  }
    -> Sur sur mon autre activité (VetementRepository) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bundle extra = getIntent().getExtras();
        String Variable = extra.getString("label");
    Eclipse me souligne getIntent. Il me propose de rajouter les lignes de code suivant pour correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private Cursor getIntent() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    Et quand je lance l'apli dans l'AVD, pareil, l'appli crash et me renvoi la même erreur que précédemment à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.NullPointerException
    Sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bundle extra = getIntent().getExtras();

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    A vérifier, mais c'est possible que si tu ne changes pas la valeur du Spinner manuellement, la valeur retournée par getSelectedItem() soit null. Vu Qu'il n'y a pas d'item explicitement selectionné.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    J'ai bien pensé à ça. Mais j'ai vérifié. Même si je change manuellement la valeur du spinner, l'appli crash tout de même.

    Je vais encore creuser un peu sur le sujet ce week-end même si ça commence à faire un moment que je me fait des noeuds au cerveau pour essayer de sortir de cette impasse. Bref, je lâche pas l'affaire, je vous tiens au courant si j'ai du nouveau. Et surtout, si vous avez une solution ou si vous pouvez me guider je suis preneu.

    Merci en tout cas pour ces réponses.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur MOA SI
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur MOA SI
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Petit up. Ya pas moyen de trouver une solution a mon problème. Un petit coup de pouce ?

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par tetsuo669 Voir le message
    Est-ce que c'est compliqué à faire ?
    Absolument pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void onClick(View v) {
     
    		  Intent t = new Intent(Spin.this, VetementRepository.class);
    			String texte = "test de transfert";
    			t.putExtra("label",texte); 
    	  }
    Jusque là c'est tout bon... Je conseille juste de stocker "label" dans un "public static final String" (la 'constante' java) histoire de ne pas avoir à chercher dans tout le code si la valeur change. Vu que l'Intent est à destination de VetementRepository, il faudrait mettre la constante dans cette classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bundle extra = getIntent().getExtras();
        String Variable = extra.getString("label");
    Quid si pas d'intent ? Quid si pas d'extra dans l'Intent (dans les deux cas => NPE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String variable = null; // <= une variable ne commence jamais par une majuscule en Java
    Intent intent = getIntent();
    if (intent != null) {
        variable = intent.getStringExtra(LA_CONSTANTE);
    Eclipse me souligne getIntent. Il me propose de rajouter les lignes de code suivant pour correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private Cursor getIntent() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    Y a trois choses pas bonnes:
    1. Eclipse ne devrait pas souligner getIntent()... Toute activité héritant de Activity, la fonction getIntent() est accessible.
    2. On ne veut pas un Cursor.... (la fonction s'appelerait getCursor ) on veut un Intent....
    3. On ne veut surtout pas renvoyer null ici (cf au dessus).

    Ce qui en arrive à la remarque finale... Spin.this étant un contexte, je pense que "Spin" est une classe d'activité, tout comme "VetementRepository" j'imagine.
    Il est quand même préférable de choisir des noms de classe cohérent et représentant ce que la classe fait... par exemple:
    "Spin" => "ChoixVetementActivity" (si on veut toujours mélanger francais/anglais)
    "VetementRepository" => "VetementRepositoryActivity"

    Au moins à chaque fois, d'un coup d'oeil, on sait qu'on a affaire à une activité et non à une SQLiteDatabase, un Fragment ou un Adapter...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [MySQL] probleme de liaison avec ma base de donnes a l'aide d'un formulaire php
    Par ibuto dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2011, 20h10
  2. Comment exporter une base de donnée oracle à l'aide de EXP
    Par med_anis_dk dans le forum Import/Export
    Réponses: 6
    Dernier message: 16/06/2006, 14h27
  3. Besoin d'aide sur la conception d'un base de données
    Par lordgodgiven dans le forum Modélisation
    Réponses: 1
    Dernier message: 01/10/2005, 16h51
  4. [VB.NET] filtre dans base de donnée
    Par speedtug dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/09/2005, 17h12
  5. aide pour exporter une base de donnée
    Par matt55 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 06/04/2004, 14h28

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