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 :

Exécuter asynctask de façon synchrone ou alors faire une temporisation


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut Exécuter asynctask de façon synchrone ou alors faire une temporisation
    Bonjour,

    Pour mon projet scolaire j'ai besoin de récupérer des données GPS et maintenant depuis les versions récentes on est obligé de passer par une méthode AsyncTask mais, le problème c'est le fait que cela soit asynchronque car lors ce que je lance la classe il continue à faire la suite et en fond de tache il exécute la Classe alors que j'ai besoin des résultats obtenue par elle même directement après son exécution..

    Voici le code d'éxécution..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //execution de la requete post pour obtenir l'id et le numéro du repsonsable
            objPostIdNum.execute(numTel, MDP);
     
     
            Toast.makeText(getApplicationContext(), objPostIdNum.result, Toast.LENGTH_LONG).show(); // LE RESULTAT N'EST PAS ENCORE CONNU
     
            //faire tempo, CA NE MARCHE PAS...
    Merci

  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
    Parce que ce n'est pas comme cela qu'une AsyncTask s'utilise. En gros, il faut positionner ton code Toast.makeText(getApplicationContext(), objPostIdNum.result, Toast.LENGTH_LONG).show(); dans une méthode de ton choix dite de "callback", c-a-d qui serait appelée seulement quand l'AsyncTask aura terminé son travail. Explications ici.
    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
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    le problème pour moi c'est justement il faut que la suite s'intérprete seulement si le asynTask est terminé, alors on peux l'exécuter en synchrone ?

    Merci

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Et si, au lieu de tenter de forcer à faire rentrer un objet triangle dans un trou carré, tu changeais pour utiliser l'outil comme il le faut ?

    Change ton code pour réaliser ce que Hephaistos007 t'a conseillé, c'est la seule bonne manière de faire.
    i.e. : comprend la notion de callback et bouge ton code dans le callback de l'AynsTask
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Et si, au lieu de tenter de forcer à faire rentrer un objet triangle dans un trou carré, tu changeais pour utiliser l'outil comme il le faut ?

    Change ton code pour réaliser ce que Hephaistos007 t'a conseillé, c'est la seule bonne manière de faire.
    i.e. : comprend la notion de callback et bouge ton code dans le callback de l'AynsTask
    Tout le code de mon postData il faut que le mette dans le onPostExecute c'est ça ?

    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
     @Override
        public String doInBackground(String... params) {
            // TODO Auto-generated method stub
            postData(params[0], params[1], params[2], params[3]);
            return null;
        }
     
        public void onPostExecute() {
     
            //Toast.makeText(getApplicationContext(), objPostIdNum.result, Toast.LENGTH_LONG).show();
        }
     
     
        public String postData(String precisionP, String dateP, String positionPLa, String positionPLo) {
     
     
            try {
                adresseUrlPost = "http://192.168.107.14:146/api/PositionGPS/42202b162";
     
                // 1. Création de  HttpClient
                HttpClient httpclient = new DefaultHttpClient();
     
                // 2. créer la requete POST en lui donnant l'URL
                HttpPost httpPost = new HttpPost(adresseUrlPost);
     
                String json = "";
     
                // 3. Construction d'un jsonObject
                JSONObject jsonObject = new JSONObject();
                jsonObject.accumulate("PrecisionPosition", precisionP);
                jsonObject.accumulate("dateHeurePosition", dateP);
                jsonObject.accumulate("Position.Latitude", positionPLa);
                jsonObject.accumulate("Position.Longitude", positionPLo);
     
     
                // 4. Convertion JSONObject de JSON en String
                json = jsonObject.toString();
     
                // ** Alternative way to convert Person object to JSON string usin Jackson Lib
                // ObjectMapper mapper = new ObjectMapper();
                // json = mapper.writeValueAsString(person);
     
                // 5. set json to StringEntity
                StringEntity se = new StringEntity(json);
     
                // 6. set httpPost Entity
                httpPost.setEntity(se);
     
                // 7. Set some headers to inform server about the type of the content
                httpPost.setHeader("Accept", "application/json");
                httpPost.setHeader("Content-Type", "application/json");
     
     
                // 8. Executer une requete POST en lui donnant l' URL
                HttpResponse httpResponse = httpclient.execute(httpPost);
     
                // 9. receive response as inputStream
                inputStream = httpResponse.getEntity().getContent();
     
     
                // 10. convert inputstream to string
                if (inputStream != null)
                    result = convertInputStreamToString(inputStream);
                else
                    result = "probleme, ne fonctionne pas";
     
            } catch (Exception e) {
                Log.d("InputStream", e.getLocalizedMessage());
            }
     
            // 11. return result
            return result;
        }

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    C'est une possibilité.

    Tu peux aussi passer par l'architecture "Observer" pour simplement dire à l'observateur que le traitement est fini

    Documentation : http://design-patterns.fr/observateur
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hizin Voir le message
    C'est une possibilité.

    Tu peux aussi passer par l'architecture "Observer" pour simplement dire à l'observateur que le traitement est fini

    Documentation : http://design-patterns.fr/observateur
    Oui mais alors lors de l'éxécution comment je fais pour faire en sorte que cela ne continue pas à interpréter la suite tant que justement mon asyncTask n'est pas terminé ?

    Merci

  8. #8
    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
    Citation Envoyé par mailoy Voir le message
    Tout le code de mon postData il faut que le mette dans le onPostExecute c'est ça ?
    Non. Regardes ce que dis le tuto, crées une méthode populate() dans ton Activity qui fera le toast. Cette méthode sera appelée depuis le onPostExecute() de l'AsyncTask.
    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

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Non. Regardes ce que dis le tuto, crées une méthode populate() dans ton Activity qui fera le toast. Cette méthode sera appelée depuis le onPostExecute() de l'AsyncTask.
    je crois que tu n'as pas compris..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     //execution de la requete post pour obtenir l'id et le numéro du repsonsable
            objPostIdNum.execute(numTel, MDP); // faire ça en bloquant la suite
     
            // vue que objPostIdNum.result="" alors 
            // bloquer, tant que le resultat de AsyncTaskPostId==null
            // ou alors faire tempo faire tempo
     
            // Ici j'ai besoin de la valeur de objPostIdNum.result=""

  10. #10
    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
    Si si, j'ai parfaitement compris. Soit tu t'entêtes à utiliser n'importe comment un AsyncTask, soit tu fais ce que je t'ai conseillé.
    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

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Si si, j'ai parfaitement compris. Soit tu t'entêtes à utiliser n'importe comment un AsyncTask, soit tu fais ce que je t'ai conseillé.
    Je ne vois pas comment justement, j'ai lu le cours-tuto que tu m'as envoyé et sincérement cela ne montre pas comme exécuter un asyncTask en sync... justement c'est plutot l'inverse à se que j'ai compris..

  12. #12
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par mailoy
    [...] cela ne montre pas comme exécuter un asyncTask en sync
    Donc tu t'entêtes
    C'est normal que le tuto ne le montre pas, puisque :
    - c'est inepte
    - c'est une mauvaise pratique
    - c'est, comme je l'ai écrit, tenter de faire rentrer un carré dans un rond

    Pour la énième fois : intéresse-toi au mécanisme de callback.
    Tu ne dois en aucun cas transformer ton AysncTask en tâche synchrone, mais tu dois faire en sorte que le traitement suivant soit déclenché par l'AsyncTask une fois que celle-ci s'est terminée. Il faut que tu appelles la suite de ton traitement dans le onPostExecute de ton AsyncTask, et pour ça, c'est typiquement un mécanisme de Callback avec un patron de conception (design pattern) Observateur (Observer)
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    merci pour vos tuto je crois que j'ai compris , mais pas sur que ce soit la meilleure solution ce que je fait..

    Je retourne la valeur du resultat dans mon onPostExecute()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void onPostExecute() {
               getretour();
        }
    et de l'autre coté je test si j'ai reçu la réponse ou pas .. ça va ou pas et tant que j'ai pas la réponse bah j'attend.. ?

  14. #14
    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
    J'interviens rapidement.... sur le terme: "ben j'attends"

    Non... le programme n'attends pas... un programme ne dois jamais attendre. Un programme réagit à des événements:
    * La fenetre est affiché ? => le programme démarre une tâche de récupération de données.
    * Les données sont arrivées => le programme affiche les données et permet à l'utilisateur d'interagir avec.
    * L'utilisateur a interagi avec les données => le programme fait ce qu'il a à faire avec ces nouvelles données.

    A aucun moment le programme "n'attends" explicitement.


    Par exemple: j'ai besoin pour envoyer un message d'une position GPS:
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    onCreate:
    * On affiche l'interface de message
    * On démarre "l'écoute" de localisation ("onLocationUpdated")
    * On setup le lien bouton "envoyer" avec "onButtonPressed"
    * On récupère la dernière position connue (et valide). Si pas disponible, on grise le bouton "envoyer" (avec éventuellement une progress bar pour dire à l'utilisateur qu'on attend un truc).
     
    onButtonPressed
    * On envoie le message avec la dernière localisation connue (elle est forcément valide à ce moment).
     
    onLocationUpdated
    * On met à jour la dernière localisation connue. Si nouvelle, on rend disponible le bouton "envoyer" (et éventullement on enleve la progress bar).

    Exemple avec un appel à un webservice entre l'edit d'un champ, et l'envoi du message:
    Code text : 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
     
    onCreate:
    * On affiche l'interface de message.
    * on setup le lien edit-text "destinataire" avec "onRecipientChange"
    * on setup le lien bouton "envoyer" avec "onSend"
    * on interdit l'utilisation du bouton "envoyer" (tant qu'on n'a pas le destinataire)
     
    onRecipientChange
    * on desactive le bouton envoyer
    * Si on a déjà une tâche de récupération du tel, on l'annule (cancel(true))
    * On démarre une nouvelle tâche de récupération du tel. Quand celle-ci se termine (onPostExecute) elle appelera onRecipientNumRetrieved
     
    onRecipientNumReceived(num)
    * on met à jour le tel stocké dans l'activité
    * on réactive le bouton envoyer
     
    onSend
    * ici on a forcément le tel stocké dans l'activité correspondant au recipient.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par nicroman Voir le message
    J'interviens rapidement.... sur le terme: "ben j'attends"

    Non... le programme n'attends pas... un programme ne dois jamais attendre. Un programme réagit à des événements:
    * La fenetre est affiché ? => le programme démarre une tâche de récupération de données.
    * Les données sont arrivées => le programme affiche les données et permet à l'utilisateur d'interagir avec.
    * L'utilisateur a interagi avec les données => le programme fait ce qu'il a à faire avec ces nouvelles données.

    A aucun moment le programme "n'attends" explicitement.


    Par exemple: j'ai besoin pour envoyer un message d'une position GPS:
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    onCreate:
    * On affiche l'interface de message
    * On démarre "l'écoute" de localisation ("onLocationUpdated")
    * On setup le lien bouton "envoyer" avec "onButtonPressed"
    * On récupère la dernière position connue (et valide). Si pas disponible, on grise le bouton "envoyer" (avec éventuellement une progress bar pour dire à l'utilisateur qu'on attend un truc).
     
    onButtonPressed
    * On envoie le message avec la dernière localisation connue (elle est forcément valide à ce moment).
     
    onLocationUpdated
    * On met à jour la dernière localisation connue. Si nouvelle, on rend disponible le bouton "envoyer" (et éventullement on enleve la progress bar).

    Exemple avec un appel à un webservice entre l'edit d'un champ, et l'envoi du message:
    Code text : 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
     
    onCreate:
    * On affiche l'interface de message.
    * on setup le lien edit-text "destinataire" avec "onRecipientChange"
    * on setup le lien bouton "envoyer" avec "onSend"
    * on interdit l'utilisation du bouton "envoyer" (tant qu'on n'a pas le destinataire)
     
    onRecipientChange
    * on desactive le bouton envoyer
    * Si on a déjà une tâche de récupération du tel, on l'annule (cancel(true))
    * On démarre une nouvelle tâche de récupération du tel. Quand celle-ci se termine (onPostExecute) elle appelera onRecipientNumRetrieved
     
    onRecipientNumReceived(num)
    * on met à jour le tel stocké dans l'activité
    * on réactive le bouton envoyer
     
    onSend
    * ici on a forcément le tel stocké dans l'activité correspondant au recipient.
    Désolé mais clairement je ne comprend pas grand chose...

    Après des tonnes de recherches il est vrai que j'ai trouvé des solution bien plus propre en créant une interface etc...
    Mais j'ai trouvé quelque de rapide mais qui me parait pas top j'aimerais votre avis .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     MyAsyncTaskPostIdNum objPostIdNum = new MyAsyncTaskPostIdNum();
            //execution de la requete post pour obtenir l'id et le numéro du repsonsable
            try {
                objPostIdNum.execute(numTel, "cdfIris2015").get();
    Le get va bloquer le thread du main temps qu'il n'a pas la réponse.. du coup ça met en arret le main mais au moins il ne fait pas la suite le temps qu'il n'a pas la réponse..

    Je demande votre avis parce que j'ai trouvé plus propre ici :
    https://learnandroidtoday.wordpress....of-async-task/
    ou
    http://www.codeproject.com/Questions...k-in-main-thre

    Merci

  16. #16
    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
    C'est fort, c'est très fort

    Le tuto que tu cites https://learnandroidtoday.wordpress....of-async-task/ expliques justement que le get() bloques l'interface (ce qui est une erreur) et donc propose en réponse ... exactement le même pattern (processFinish() est totalement équivalent à populate()) avec en plus une interface (au sens Java du terme) pour faire plus propre.

    Je vais être très clair : ta solution, celle à laquelle tu tiens tant (on ne sait pas vraiement pourquoi) n'existe pas. Ce n'est pas une possibilité, ni même une simplification, c'est juste du code qui ne marche pas et ne marchera jamais. Nous sommes plusieurs à te l'avoir dit. Si tu veux rester bloquer 5 ans sur la même erreur, c'est ton choix mais nous clôturons ce fil de discussion.
    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

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    C'est fort, c'est très fort

    Le tuto que tu cites https://learnandroidtoday.wordpress....of-async-task/ expliques justement que le get() bloques l'interface (ce qui est une erreur) et donc propose en réponse ... exactement le même pattern (processFinish() est totalement équivalent à populate()) avec en plus une interface (au sens Java du terme) pour faire plus propre.

    Je vais être très clair : ta solution, celle à laquelle tu tiens tant (on ne sait pas vraiement pourquoi) n'existe pas. Ce n'est pas une possibilité, ni même une simplification, c'est juste du code qui ne marche pas et ne marchera jamais. Nous sommes plusieurs à te l'avoir dit. Si tu veux rester bloquer 5 ans sur la même erreur, c'est ton choix mais nous clôturons ce fil de discussion.
    Je vais alors faire la solution du tuto et si je suis bloqué à un endroit je viendrais poser des questions

    Merci

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    C'est fort, c'est très fort

    Le tuto que tu cites https://learnandroidtoday.wordpress....of-async-task/ expliques justement que le get() bloques l'interface (ce qui est une erreur) et donc propose en réponse ... exactement le même pattern (processFinish() est totalement équivalent à populate()) avec en plus une interface (au sens Java du terme) pour faire plus propre.

    Je vais être très clair : ta solution, celle à laquelle tu tiens tant (on ne sait pas vraiement pourquoi) n'existe pas. Ce n'est pas une possibilité, ni même une simplification, c'est juste du code qui ne marche pas et ne marchera jamais. Nous sommes plusieurs à te l'avoir dit. Si tu veux rester bloquer 5 ans sur la même erreur, c'est ton choix mais nous clôturons ce fil de discussion.
    J'ai fais comme le tuto même si j’avoue ne pas avoir tout compris.. pas d’erreur mais malheureusement je ne vois pas de différence avec la récupération de base.. au final il fait la suite sans forcement avoir la réponse du AsyncTask... donc la je suis bien embêté..

    pouvez vous m'expliquer se que fait finalement la technique utilisée dans ce tuto ?

    Merci

  19. #19
    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
    Si tu suis le tuto, tu as la garantie que tout le code mis dans populate() sera fait après la fin de l'AsyncTask. Tu peux y mettre ton Toast et tout le code que tu veux...
    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

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Si tu suis le tuto, tu as la garantie que tout le code mis dans populate() sera fait après la fin de l'AsyncTask. Tu peux y mettre ton Toast et tout le code que tu veux...
    justement .. au final cela ne change rien à la méthode de reception basic.... car la suite du code est effectué dans une autre méthode qui elle est appelée lors ce que la asyntask est terminée..

    Mais moi j'ai besoin d’effectuer le code qui est à la suite du lancement de l'asyncTask qui au final ce code est dans la même méthode..

Discussions similaires

  1. Exécuter des requêtes HTTP synchrones
    Par _skip dans le forum Réseau
    Réponses: 2
    Dernier message: 24/02/2011, 16h47
  2. La meilleur façon de faire une recherche ?
    Par Jcpan dans le forum PL/SQL
    Réponses: 21
    Dernier message: 06/10/2008, 10h25
  3. Comment faire une temporisation sous Delphi ?
    Par vodasan dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2007, 11h29
  4. Petite question sur la façon de faire une sorte de thread
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/05/2007, 23h28
  5. Réponses: 2
    Dernier message: 27/04/2007, 18h29

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