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 :

Erreur AsyncTask requête POST JSON


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 Erreur AsyncTask requête POST JSON
    Bonjour,

    j'ai un problème lorsque je lance ma classe qui effectue une requete POST, après avoir fait des rechercher malheureusement je n'ai rien trouvé.

    je vous donne l'erreur :

    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

    Et le code :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    public class MyAsyncTaskPostIdNum extends AsyncTask<String, Void, String> {
     
     
        InputStream inputStream = null;
        String result = "";
        String adresseUrlPost;
        String responseBody;
        //MainActivity objParent = new MainActivity();
        HttpResponse response;
        String content;
     
        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            postData(params[0], params[1]);
            return null;
        }
     
        protected void onPostExecute() {
     
            // Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show();
        }
     
     
        public String postData(String telephoneP, String mdpP) {
     
     
     
            try {
                //Composition de l'adresse url avec la valeur de l'edit text et du num de téléphone récupéré
                adresseUrlPost="http://"+MainActivity.valUrl+"/PersonSurveille";
     
                // 1. create HttpClient
                HttpClient httpclient = new DefaultHttpClient();
     
                // 2. make POST request to the given URL
                HttpPost httpPost = new HttpPost(adresseUrlPost);
     
                String json = "";
     
                // 3. build jsonObject
                JSONObject jsonObject = new JSONObject();
                jsonObject.accumulate("telephone", telephoneP);
                jsonObject.accumulate("password", mdpP);
     
     
                // 4. convert JSONObject to JSON to 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. Execute POST request to the given 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;
        }
     
        private static String convertInputStreamToString(InputStream inputStream) throws IOException {
            BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
            String line = "";
            String result = "";
            while((line = bufferedReader.readLine()) != null)
                result += line;
     
            inputStream.close();
            return result;
     
        }
    }

  2. #2
    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
    Juste un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // 9. receive response as inputStream
                inputStream = httpResponse.getEntity().getContent();
     
                // 10. convert inputstream to string
                if (inputStream != null)
                    result = convertInputStreamToString(inputStream);
    Peut etre remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    result = EntityUtils.toString(httpResponse.getEntity());
    Ça évitera déjà les bugs éventuels dans du code bizarre (utilisation de += sur des String ??) ....


    Ensuite, malheureusement l'erreur indique qu'on essaye d’exécuter une AsyncTask dans autre chose que le thread principal. Mais on n'a pas le code qui crée / démarre l'AsyncTask, donc il est difficile d'aider.
    d'autant que vous n'avez pas copié toute la stack-trace de l'exception, et du coup impossible de dire d'ou ça vient.

    D'ailleurs... en parlant de log & stack-trace... une exception ne se log jamais en utilisant +e.getLocalizedMessage() (qui une fois sur deux est vide au passage), mais en utilisant le paramètre additionnel d'exception:
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.d("InputStream", e.getLocalizedMessage());
    Utilisez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.e("InputStream", "Erreur de lecture", e);   // <= Log.e parce que c'est une erreur non ?   et ,e  pour avoir toutes les informations contenues dans l'exception (la cause, la source, la stack-trace).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,
    Citation Envoyé par mailoy Voir le message
    je vous donne l'erreur :

    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
    D'après ce que tu as posté, je comprends que l'erreur vient du fait que tu essaies quelque part d'exécuter une action dans un thread secondaire alors qu'elle devrait être exécutée dans le thread principal. Peux tu poster le message d'erreur complet pour nous permettre de voir quelle ligne génère cette erreur?

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    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
    Juste un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // 9. receive response as inputStream
                inputStream = httpResponse.getEntity().getContent();
     
                // 10. convert inputstream to string
                if (inputStream != null)
                    result = convertInputStreamToString(inputStream);
    Peut etre remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    result = EntityUtils.toString(httpResponse.getEntity());
    Ça évitera déjà les bugs éventuels dans du code bizarre (utilisation de += sur des String ??) ....


    Ensuite, malheureusement l'erreur indique qu'on essaye d’exécuter une AsyncTask dans autre chose que le thread principal. Mais on n'a pas le code qui crée / démarre l'AsyncTask, donc il est difficile d'aider.
    d'autant que vous n'avez pas copié toute la stack-trace de l'exception, et du coup impossible de dire d'ou ça vient.

    D'ailleurs... en parlant de log & stack-trace... une exception ne se log jamais en utilisant +e.getLocalizedMessage() (qui une fois sur deux est vide au passage), mais en utilisant le paramètre additionnel d'exception:
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.d("InputStream", e.getLocalizedMessage());
    Utilisez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.e("InputStream", "Erreur de lecture", e);   // <= Log.e parce que c'est une erreur non ?   et ,e  pour avoir toutes les informations contenues dans l'exception (la cause, la source, la stack-trace).
    Finalement je ne sais pas pourquoi mais j'ai mis toute les méthodes en public et cela fonctionne ...

Discussions similaires

  1. Réponse d'une requête POST JSON
    Par mailoy dans le forum Android
    Réponses: 7
    Dernier message: 18/05/2015, 10h44
  2. Erreur 500 dans une requête POST AJAX
    Par Netci dans le forum Services Web
    Réponses: 0
    Dernier message: 07/05/2013, 12h31
  3. [AJAX] Lire une erreur php dans un résultat de requête en json
    Par krunch dans le forum jQuery
    Réponses: 4
    Dernier message: 22/02/2013, 11h28
  4. [AJAX] Requête post Ajax et JSON
    Par tralloc dans le forum jQuery
    Réponses: 5
    Dernier message: 07/11/2012, 23h12
  5. Analyse de code HTML en réponse a une requête post.
    Par ghost942 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/06/2005, 21h40

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