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 :

Boucle, if et tableau (comparer)


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut Boucle, if et tableau (comparer)
    Bonjour,

    Voilà j'ai un petit soucis, j'appel une asyncTask 6 fois pour remplir différentes listes.
    Mais le soucis c'est que maintenant j'aimerais faire un truc du style que si toutes les listes sont à null, j'affiche un toast.
    Mais je ne vois pas trop comment faire à part comparer manuellement avec les index... (pas très joli tout ça)

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Pourquoi ne pas te dire que tout est vrai (rempli) par défaut.
    Lorsque l'une des conditions est fausse, ta variable sera fausse.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Bah en fait je t'explique ^^
    Si mon inputstream est nul je renvoie une liste null.
    Si je fais mon toast dans le onPostExecute, mon message va se répéter 6 fois ^^ (j'ai une boucle qui fait 6 asyncDownload).
    Bon alors autre solution c'est dans la boucle tester la taille de ma liste (qui se trouve dans une liste).
    Là le problème c'est que la taille de mes listes sont à 0 qd il fait le test et seulement après les données sont chargées ^^
    Donc en gros ma boucle va plus vite que mon doingBackground (un peu logique).

    Suis complètement perdu là :s

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Et si tu crées un asyncTask (père) qui lance ses 6 asyncTask fils?

    Tu gères le onPostExecute du père uniquement ^^

    (je suis ton père)

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    J'y ai pensé mais là ça risque vraiment d'être pas propre du tout :s
    Je sais que si on lance une asyncTask dans une autre on peut attendre la fin, mais là si je fais une père qui lance les autres ça va être la merde surtout que je suis dans des boucles à la base :s

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Moi je l'ai fait (père-fils) et ça marche nickel

    Il y a une solution plus simple dans ton cas: tu crées une variable compteur, tu ajoutes +1 quand il passe dans les onPostExecute, et quand c'est égal à 6, tu checkes et lance le toast

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    J'y ai pensé aussi, mais... à chaque fois c'est une instance différente xD
    Donc en gros ce que je pourrais faire c'est passer en paramètre via le constructeur un compteur ^^

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Les instances peuvent être différentes (bin oui).

    Définis ta variable compteur dans la classe qui appelle les 6 asyncTask et elle devrait être accessible.

  9. #9
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Je m'avance peut-être mais il me semble que l'AsyncTask ne sait pas ou en sont les autres, donc ce n'est pas A LUI de dire que tout est vide.

    Il y a forcément quelque part un "manager" de ces tâches (l'activité, ou autre j'en sais rien).. C'est ce manager qui doit faire le toast quand toutes les tâches sont finies.

    Par exemple (quand je met '...' ca veut dire qu'il faut remplacer par quelques chose de valide hein !):
    Code de "MyAsyncTask.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
     
    class MyAsyncTask extends AsyncTask<...>
    {
        public static interface Callback
        {
            public void onMyTaskEnded(...);
        }
     
        private Callback  callback;
     
        public MyAsyncTask(Callback cb) { this.callback = cb; }
     
        protected onPostExecute(...)
        {
             this.callback.onMyTaskEnded(...);
        }
    }
    Code de l'appelant:
    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
     
    class MyAsyncCaller ....  implements MyAsyncTask.Callback
    {
        private int numTasks = 0;
     
        public void onMyTaskEnded(...)
        {
           --numTasks;
           if (numTasks== 0)
              onAllTasksEnded();
        }
     
        public void startTasks(...)
        {
            if (numTasks == 0)
               onTasksStarted();
            ++numTasks;
            MyAsyncTask task = new MyAsyncTask(this);
            task.execute(...);
        }
     
        public void onTasksStarted() {
            // show activity (progress ?)
        }
     
        public void onAllTasksEnded() {
            // hide activity (progress ?)
            // checking results...
        }
    }

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Bah en fait mon activité appel 6 fois "new asycnDownload().execute()" en prenant en paramètre les listes que j'ai besoin.
    Mais vu que l'asyncTask est en arrière plan, les boucle n'attendent pas qu'elles se finissent et donc j'ai des liste vides ^^

  11. #11
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Oui et ben regardes le code que j'ai posté... ca devrait résoudre ton problème.

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    J'ai relu qlq fois pour être sûr de bien comprendre ^^
    Mais en fait si par exemple je met un toast dans la méthode onTasksStarted() il va se répéter 6 fois aussi non?

  13. #13
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Non onTaskStarted() n'est appelé que si aucune async-task n'est en train de tourner lors du premier execute() quoi !

    je pensais plutot à onAllTasksEnded() qui est appelé quand toutes les async-task on terminé leur boulot.

Discussions similaires

  1. [PERF] Boucle implicite et tableau
    Par petrebang dans le forum Fortran
    Réponses: 2
    Dernier message: 30/10/2007, 17h24
  2. [MySQL] Pagination : faire une boucle dans un tableau ?
    Par benjam89 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/09/2007, 20h10
  3. [Tableaux] Boucle sur un tableau associatif
    Par alexfrere dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2006, 15h44
  4. [Tableaux] Boucle dans un tableau
    Par apprenti-fab dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2006, 10h14
  5. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37

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