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 :

Spinner a problème


Sujet :

Composants graphiques Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut Spinner a problème
    Bonjour,
    Je débute et je rencontre un problème; Mon programme plante quand je veux savoir si un spinner est vide ou non. (une autre partie du programme remplissant le spinner à la demande)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private Runnable mesuresTemperature = new Runnable() {
            @Override
            // Lance une nouvelle tache asynchone de mesures en temps réel
            public void run() {
                // Vérifie que le spinner contient des rom's ID
                Spinner mSpinner = (Spinner) findViewById(R.id.romIDSpinner);
                if (mSpinner.getAdapter().getCount() != 0)
                    // Vérifie que l'Id est bien celle d'un capteur de température 1W avant de lancer la boucle pour rien
                    if (sUsbController.isThermometreDevice(sUsbController.ROM_NO_LIST[romIDSpinner.getSelectedItemPosition()])) {
                        new GetTemperatureTask().execute(romIDSpinner.getSelectedItemPosition());
                    }
                myHandler.postDelayed(mesuresTemperature, getResources().getInteger(R.integer.mInterval));
            }
        };
    Ca plante en ligne 7
    Ou est mon erreur ? SVP

  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
    Sans le détail de l'erreur, difficile de t'aider. Ton runnable est-il bien lancé dans le UIThread ?
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    ALors oui, le runnable est lancé, dans la partie onResume de l'UI, comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     // Lancement des mesures répétitives
            if (myHandler != null)myHandler.removeCallbacks(mesuresTemperature);
            myHandler = new Handler();
            myHandler.postDelayed(mesuresTemperature, getResources().getInteger(R.integer.mInterval));
    Mon problème c'est également l'absence de message d'erreur; Ni a l'exécution, ni au debug.
    Sur le téléphone, ca se traduit par un arrêt du programme avec le message qui dit que mon prgm. "s'est arrêté"
    Sur ANdroidStudio aucun message en Run; Et en Debug, rien non plus en StepOver mais si j'évalue dans son contexte l'expression "mSpinner.getAdapter().getCount();" j'obtiens "java.lang.NullPointerException"

    Comme je débute, je ne sais pas bien utiliser les monstrueuses ressources de ANdroidStudio....

    Pour info, ce bug survient après un changement de version d'une autre config qui fonctionnait mais ne me donnait pas satisfaction ; Initialement, je déclenchais le runnable via un listener comme ceci :
    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
    ((Spinner) findViewById(R.id.romIDSpinner)).setOnItemSelectedListener(
                    new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view,
                                                   int position, long id) {
                            // Vérifie que l'Id est bien celle d'un capteur de température 1W avant de lancer la boucle pour rien
                           if (sUsbController.isThermometreDevice(sUsbController.ROM_NO_LIST[romIDSpinner.getSelectedItemPosition()])) {
                                if (myHandler != null)
                                    myHandler.removeCallbacks(mesuresTemperature);
                                myHandler = new Handler();
                                myHandler.postDelayed(mesuresTemperature, getResources().getInteger(R.integer.mInterval));
                            }
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                        }
                    }
            );
    Ca tournait bien mais, quand je passais dans la partie qui gère les préférences, au retour dans dans l'UI thread, le runnable n'était plus relancé car l'écouteur ne détectait aucun changement de sélection sur le spinner. Il fallait alors bricoler l'interface pour désélectionner puis resélectionner le composant choisi dans le spinner pour relancer le runnable.
    Je tente donc de lancer le runnable systématiquement et ce n'est qu'a l'intérieur de celui ci que je fais des vérifications.
    J'ajoute que si je vais vite a faire en sorte que le spinner soit rempli avant les 6 secondes fatidiques, ca ne plante pas; C'est donc pas très grave, docteur !

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Gilles BILLARD Voir le message
    Bonjour,
    Je débute et je rencontre un problème; Mon programme plante quand je veux savoir si un spinner est vide ou non. (une autre partie du programme remplissant le spinner à la demande)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private Runnable mesuresTemperature = new Runnable() {
            @Override
            // Lance une nouvelle tache asynchone de mesures en temps réel
            public void run() {
                // Vérifie que le spinner contient des rom's ID
                Spinner mSpinner = (Spinner) findViewById(R.id.romIDSpinner);
                if (mSpinner.getAdapter().getCount() != 0)
                    // Vérifie que l'Id est bien celle d'un capteur de température 1W avant de lancer la boucle pour rien
                    if (sUsbController.isThermometreDevice(sUsbController.ROM_NO_LIST[romIDSpinner.getSelectedItemPosition()])) {
                        new GetTemperatureTask().execute(romIDSpinner.getSelectedItemPosition());
                    }
                myHandler.postDelayed(mesuresTemperature, getResources().getInteger(R.integer.mInterval));
            }
        };
    Ca plante en ligne 7
    Ou est mon erreur ? SVP
    Déjà, on fait les inflate des views dans la méthode onCreate () de l'activity pour une meilleure performance dans l'affichage. Après, tu devrais tout d'abord passer un adaptateur à ton spinner bien avant de vérifier s'il contient quelque chose! le spinner n'ayant pas d'adaptateur impossible de savoir s'il contient quelque chose.


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    ha d'accord, ca doit etre ca le problème. Je tente de corriger...
    Merci.

Discussions similaires

  1. Spinners Android : Problèmes avec Prompts
    Par Mouke dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 03/02/2014, 10h21
  2. Problème dans mon spinner
    Par MezouariJihad dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 17/10/2012, 11h26
  3. Problème d'insertion du Spinner dans un alertDialog
    Par af.zakaria dans le forum Composants graphiques
    Réponses: 11
    Dernier message: 26/08/2012, 20h58
  4. Problème avec plusieurs spinners
    Par rohart dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 20/02/2012, 11h17
  5. Réponses: 6
    Dernier message: 20/06/2011, 11h25

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