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 boucle while


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Problème boucle while
    Bonjour,

    Je débute en Android et j'ai pour projet de créer un quiz lambda pour me familiariser avec le langage.

    J'aimerai faire une boucle pour l'arrivée des questions mais à chaque fois que je mets une boucle et que je teste l'application seul un écran blanc m'apparait. Je crois comprendre qu'avant d'afficher quoi que ce soit Android va jusqu'au bout de la méthode onCreate() et que étant donné que la condition de sortie de ma boucle est l'appui sur un bouton qui n'est même pas affiché, l'application boucle à l'infini.

    Cela fait quelques heures que je recherche en vain des réponses sur ce problème.

    Quelqu'un aurait une petite idée pour régler ce problème ? Merci infiniment à ceux qui prendront le temps de me répondre. Bonne soirée. (Ci joint le code ma classe JAVA)

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    package com.helmi.realquiz;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.*;
    import java.util.Random;
     
    public class MainActivity extends Activity implements View.OnTouchListener{
    int a=0;
       String reponse="";
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     
            setContentView(R.layout.activity_main);
    //int nbvies=5,choixdesc;
     
    ((TextView) findViewById(R.id.question)).setText("Quel Pokémon évolue en Tarpaud ?");
            ((Button) findViewById(R.id.rep1)).setText("Ptitard");
            ((Button) findViewById(R.id.rep2)).setText("Tetarte");
            ((Button) findViewById(R.id.rep3)).setText("Tartard");
            ((Button) findViewById(R.id.rep4)).setText("Tiplouf");
     
            ((Button) findViewById(R.id.rep1)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep2)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep3)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep4)).setOnTouchListener(this);
    reponse="Tetarte";
    while (a==0)
            {
    try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            setContentView(R.layout.activity_main);
        }
     
    @Override
    public boolean onTouch(View v, MotionEvent event) {
            TextView text = new TextView(this);
    a=v.getId();
            String b = (String) ((Button) findViewById(a)).getText();
    if (reponse.equalsIgnoreCase(b))
          {
              text.setText("Trouvé");
              setContentView(text);
          }
    else
    {
              text.setText("Loupé");
              setContentView(text);
          }
    return true;
        }
    }

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    En faisant un boucle comme tu le fait tu vas bloquer l'interface graphique , et comme tu t'en es rendu compte elle est inutilisable.

    Si ton but est de changer la question à intervalle régulier tu peux faire ça de différente façon (timer , thread , handler ...)
    Mais je te conseille vivement d'essayer de maitriser une version simple de ton appli avant d'aller plus loin. Ton code montre une méconnaissance complète , si tu veux aller trop vite tu vas construire sur de mauvaise base et vite te retrouvé noyé sous les notions.

    Travail par itération :

    - Afficher une question
    - Gérer les bouton
    - Gérer bonne ou mauvaise réponse.

    Une fois que toute celà fonctionne parfaitement pour une question , tu peux envisager d'aller plus loin.

    Note : Tu fait 2x appel à setContentView => une seul fois au début de onCreate suffit.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord merci beaucoup pour ta réponse. Comment faire pour attendre que l'utilisateur appuie sur un bouton sans faire de boucle ?
    Mon code permet d'afficher une question et de gérer une bonne ou un mauvaise réponse quand c'est seulement d'une question. Quand j'en mets 2, il passe directement à la deuxième sans attendre l'appui du bouton par l'utilisateur...
    Je suis allé voir du côté des Thread j'en ai sorti ça mais j'ai toujours les mêmes problèmes :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    package com.helmi.realquiz;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.*;
    import java.util.Random;
     
    public class MainActivity extends Activity implements View.OnTouchListener{
        int a=0;
       String reponse="";
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            setContentView(R.layout.activity_main);
            //int nbvies=5,choixdesc;
     
            ((TextView) findViewById(R.id.question)).setText("Quel Pokémon évolue en Tarpaud ?");
            ((Button) findViewById(R.id.rep1)).setText("Ptitard");
            ((Button) findViewById(R.id.rep2)).setText("Tetarte");
            ((Button) findViewById(R.id.rep3)).setText("Tartard");
            ((Button) findViewById(R.id.rep4)).setText("Tiplouf");
     
            ((Button) findViewById(R.id.rep1)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep2)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep3)).setOnTouchListener(this);
            ((Button) findViewById(R.id.rep4)).setOnTouchListener(this);
            reponse="Tetarte";
            Thread myThread = new Thread(myRunnable);
            myThread.start();
            this.myRunnable.run();
     
            a=0;
            ((TextView) findViewById(R.id.question)).setText("Quel Pokémon évolue en Ronflex ?");
            ((Button) findViewById(R.id.rep1)).setText("Goinfrex");
            ((Button) findViewById(R.id.rep2)).setText("Tetarte");
            ((Button) findViewById(R.id.rep3)).setText("Tartard");
            ((Button) findViewById(R.id.rep4)).setText("Tiplouf");
            reponse="goinfrex";
            myThread = new Thread(myRunnable);
            myThread.start();
     
        }
        Runnable myRunnable = new Runnable() {
            @Override
            public void run() {
                while (a == 0) {
                    synchronized (this){
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            };
     
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            TextView text = new TextView(this);
            a=v.getId();
            String b = (String) ((Button) findViewById(a)).getText();
          if (reponse.equalsIgnoreCase(b))
          {
              text.setText("Trouvé");
              setContentView(text);
          }
          else
          {
              text.setText("Loupé");
              setContentView(text);
          }
            return true;
        }
    }

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Peut tu expliquer clairement ce que tu souhaites faire ?

    Si tu as besoin d'attendre qu'un utilisateur clic sur un bouton tu n'a rien à faire. Le bouton s'affiche et l'événement est déclenché quand il est touché , rien à faire entre temps.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Concrètement je souhaite poser deux questions l'une après l'autre en attendant que l'utilisateur réponde à une question (touche un bouton donc) avant de passer à la suivante, voilà ou est mon problème. Là, sur le code fourni ci-dessus on ne voit même pas la question 1 apparaître cela passe directement à la dernière
    Merci beaucoup de prendre le temps de m'aider !

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ok,

    voici comment je ferais de la façon la plus simple possible :

    Faire une interface avec :
    - Un textview pour l'intitulé de la question
    - X radio pour les réponses possibles (on part ici du principe que chaque question à le même nombre de choix possible)
    - Un bouton de validation

    Au chargement de l'application tu rempli le textview et les radio bouton avec les éléments de ta question.
    => Ta première question est donc affichée et attends une action de l'utilisateur

    Ajouter un listener sur l'événement du bouton.
    Sur le click du bouton vérifier quel radio est sélectionné et en déduire si j'ai bien répondu ou pas. Afficher l'information à l'utilisateur avec par exemple un toast ou une snackbar.

    Si ma réponse est correcte , je modifie les textviews et radio avec les informations de la seconde questions.

    Avec ces étapes tu obtiens en principe une application très simple mais qui fait ce que tu veux.
    Tu peux alors l'améliorer :
    - Charger les question d'un tableau
    - Charger les questions d'un sites web
    - Faire changer les question automatiquement après un certains temps , etc ...

    Quand on début , il faut viser au plus simple. Une fois que le plus simple fonctionne bien , on construit sur cette base solide , pour avoir quelques chose de mieux
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Ah oui c'est malin ! Merci beaucoup pour ton aide je vais m'y mettre de ce pas
    Bonne soirée !

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

Discussions similaires

  1. Problème boucle while
    Par Peedro dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2008, 14h09
  2. Problème boucle while
    Par chuko dans le forum C
    Réponses: 7
    Dernier message: 04/07/2008, 16h12
  3. Problème boucle while
    Par fred33 dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2008, 19h16
  4. [MySQL] Problème boucle WHILE
    Par Adlack dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2007, 19h30
  5. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 18h11

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