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 :

Problème avec Handler


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web et Mobile
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web et Mobile

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut Problème avec Handler
    Bonjour,

    Je m'adresse à vous car sinon ma tête va exploser et mon ordinateur avec

    Dans mon application, j'ai un compte à rebours qui se trouve un thread, de ce thread j'envoie le temps restant grâce à un Handler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    handler = new Handler() {
    	public void handleMessage(Message msg) {
    		Log.i("mode1", "Je recois un message depuis le thread : timerUpdate");
    		ttimer = msg.obj.toString();
    		txtTimer.setText(ttimer);
    		if(ttimer.equals("0")) {
    	                Log.i("mode1", "Bon le timer est à 0 donc on affiche la question suivante");
    			mode1();
    		}
    	}
    };
    Malheureusement, lorsque je rentre dans le Handler, la variable 'ttimer' est à "0" alors que j'ai initialisé le timer à 20 sec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    new Thread(new Runnable() { 
    	@Override public void run() {
    		Looper.prepare();
    		counter = new Compteur(20000, 1000);
    		// On démarre le compteur
    		counter.onTick(1000);
    		counter.start();
    		Looper.loop();
    	}
    }).start();
    Ce qui fait faire une boucle à mon application en lançant mode1() jusqu'à ce que l'application plante.

    J'ai testé en mettant des variables de contrôles pour essayé de pas rentrer dans la condition .equals("0") directement après la création du compteur, mais rien à faire...

    Comment pourrais je faire pour que quand mon compteur arrive à 0 je rentre dans une fonction ?
    Et autre question, comment faire pour envoyer à mon thread d'arrêter le compteur (fonction cancel()) quand je clique sur un button ?
    Merci d'avance de vos réponses.

    Cordialement, Maxime

  2. #2
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Pourquoi appelle-tu explicitement la méthode onTick, avant de démarrer ton compteur ? Cette méthode est appelée par Android, et ne doit pas être appelée directement
    Et pour savoir quand un CountDownTimer arrive à échéance, il y a la méthode onFinish qui est appelée

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web et Mobile
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web et Mobile

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    J'avais lu que Android appellé onTick automatiquement mais qu'on pouvait définir le temps entre chaque mise à jour.

    Oui il y a la méthode onFinish, mais comme celle ci est dans mon thread je ne sais pas comment récupérer dans l'activité principale l'action. J'avais essayé de faire un deuxième handler mais çà m'affichait plein d'erreur lors de l'exécution.
    Ou alors y a t-il un moyen d'envoyer plusieurs information à partir d'un seul Handler et si tel est le cas, quel serai la syntaxe ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web et Mobile
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web et Mobile

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    En effet quand j'enlève le onTick je ne rentre plus dès le départ, désolé d'avoir douté.

    Par contre voilà ce qui se passe quand j'appelle ma fonction mode1() dans le handler :

    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
     on entre dans le mode 1
     On a pas fini le quiz
     Le nombre de question est de : 10
     La question tirée au sort est : 2
     Je construit le Compteur
     J'envoie un message depuis le thread vers le quiz
     threadid=15: thread exiting with uncaught exception (group=0x4001b188)
     Uncaught handler: thread Thread-8 exiting due to uncaught exception
     le temps s'écoule normalement
     La bonne réponse est là 1
     java.lang.NullPointerException
     	at fr.emergenceit.quiz.Quiz$Compteur.onTick(Quiz.java:408)
     	at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)
     	at android.os.Handler.dispatchMessage(Handler.java:99)
     	at android.os.Looper.loop(Looper.java:123)
     	at fr.emergenceit.quiz.Quiz$3.run(Quiz.java:195)
     	at java.lang.Thread.run(Thread.java:1096)

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Qu'as tu à cette ligne :

    fr.emergenceit.quiz.Quiz$Compteur.onTick(Quiz.java:408)
    On dirait une variable non initialisé ...

    Bonne journée

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web et Mobile
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web et Mobile

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    Je n'ai rien à cette ligne par contre celle du dessus sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public void onTick(long millisUntilFinished) {
    	Log.i("mode1", "J'envoie un message depuis le thread vers le quiz");
    	handler.sendMessage(handler.obtainMessage(1, ""+((millisUntilFinished/1000)-1)));
    }

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

Discussions similaires

  1. [2.x] problème avec redis session handler
    Par layouna dans le forum Symfony
    Réponses: 3
    Dernier message: 22/03/2015, 18h41
  2. [2.x] Problème avec formulaire de contact dans le handler
    Par lapaupiette dans le forum Symfony
    Réponses: 2
    Dernier message: 16/04/2014, 10h01
  3. Problème avec le handler du TComPort
    Par ppascal57 dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/09/2009, 20h35
  4. Problème avec event handler
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2005, 09h31
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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