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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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
    Membre Expert
    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
    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
    Membre confirmé
    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
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    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
    Membre confirmé
    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
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    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
    Membre Expert
    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
    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

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