Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Execute url

problème dans httpclient.excecute(request)

Sujet résolu
    21 juin 2013 à 17:38:10

    Bonjour à tous,

    Je suis un nouveau développeur Android, donc par avance désolé si je ne fournis pas les informations pertinentes.

    Dans mon App je tente d'accéder à une adresse url dans le but d'ajouter une donnée dans une base SQL (celle du site internet).

    Apres quelques recherches, je trouve un code qui me parle: http://www.siteduzero.com/forum/sujet/android-et-mysql#message-84168753

    Je tente en vain de l'utiliser.

    Voici ce que je fais :

        	String url = String.format("http://monsite.free.fr/test/test.php?monParam=0.005");
        	
        	
      	
        	HttpClient httpclient = new DefaultHttpClient();
        	HttpGet request = new HttpGet(url);
        	 // Execute the request
        	 try {
        		 Log.d("GUITE","j'y passe");
        		 HttpResponse response = httpclient.execute(request);
        		 Log.d("GUITE","j'y passe pas");
        		 switch (response.getStatusLine().getStatusCode()) {
        	        case 200:
        	        	break;
        		 }
    
        	 } catch (Exception e)
        	 {
        		 Log.d("GUITE","Exception: " + e.getMessage());
        	 }
        	 

    Seulement, ça ne fonctionne pas. Le problème est lors de l’exécution de la ligne : HttpResponse response = httpclient.execute(request);

    Cette partie lève une exception e.Mesasge() => NULL

    Je suis un peu perdu, si on pouvait m'expliquer ce qu'il cloche ou même me montrer un autre façon d'arriver à mes soins.

    Par avance merci.

    -
    Edité par LaGuite 21 juin 2013 à 18:41:44

    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2013 à 10:44:52

      Salut

      As-tu pensé à rajouter la permission nécessaire pour que ton appli puisse accéder à internet?

      Dans ton manifest.xml :

      <uses-permission android:name="android.permission.INTERNET" />



      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2013 à 10:41:52

        Bonjour,

        Oui, j'ai pensé à les rajouter.

        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
        <uses-permission android:name="android.permission.INTERNET" />

        Ce n'est donc pas ça le problème.

        En fouillant de plus en plus je suis tomber sur une solution :

            	StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            	StrictMode.setThreadPolicy(policy);
        

        Si j'ajoute ces lignes juste avant, l'envoie fonctionne correctement. Par contre je suis incapable de savoir le pourquoi du comment. Si quelqu'un pouvait me confirmer la bonne utilisation et m'expliqué pourquoi dans ce cas ça fonction et sans ces lignes ça ne fonctionne plus... je suis preneur.



        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2013 à 14:10:19

          Les accès réseaux qui sont des opérations pouvant prendre du temps à se réaliser doivent être effectués dans un thread à part (autre que le thread UI). Ceci est une bonne pratique mais n'était pas obligatoire.

          Depuis Android 3.0, si tu essayes d'accéder à un réseau dans le thread UI, cela va provoquer une erreur afin d'obliger les développeurs à développer plus proprement.

          La solution que tu as trouvé consiste juste à enlever la "surveillance" qui permet à Android de ne plus accepter les accés reseaux depuis le thread UI. C'est donc juste un contournement du problème.

          Afin de corriger le problème de façon propre, tu dois donc effectuer l'ensemble de tes accès réseaux (et même l'ensemble des opérations pouvant prendre du temps à s’exécuter) dans un thread à part). La solution la plus simple est d'utiliser des AsyncTask.

          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2013 à 18:41:57

            Merci pour tes lumières.

            J'ai bien compris le problème et même plus (je ne suis pas dans le main de l'application mais dans le thread de UI).

            Doc problème résolue, encore merci.

            • Partager sur Facebook
            • Partager sur Twitter

            [Android] Execute url

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown