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 :

Utilisation de HttpClient ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 23
    Par défaut Utilisation de HttpClient ?
    Bonjour,

    Je fait mes premiers pas sur Android et j'ai besoin de récupérer un contenu http dans mon appli.

    J'ai utilisé le code suivant (j'ai fait une application minimaliste pour tester) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    HttpClient httpClient = new DefaultHttpClient();
    try {
    	HttpResponse response = httpClient	.execute(new HttpGet("http://www.google.com"));
    	TextView tv = new TextView(this);
    	tv.setText(response.getStatusLine().getStatusCode());
    	setContentView(tv);
    } catch (IOException e) {
    	TextView exception = new TextView(this);
    	exception.setText(e.getMessage() + " "
    					+ e.getClass().getName());
    	setContentView(exeception);
    	Log.e("MyActivity", "pb de connexion !", e);
    }
    J'ai également ajouté la permission <uses-permission android:name="android.permission.INTERNET" /> pour avoir accés à internet !
    J'obtiens tout le temps une UnknownHostException, sur l'émulateur (cependant le navigateur de l'émulateur arrive à naviguer sur internet !)...

    L'application se vautre sur un vrai ordiphone !

    Comment récupérer le contenu d'une url ?

    ++

  2. #2
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Salut,

    voilà la fonction que j'utilise pour récupérer le code source d'une page web :
    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
     
       public static String getPage(String url) throws ClientProtocolException, IOException{
        	StringBuffer stringBuffer = new StringBuffer("");
        	BufferedReader bufferedReader = null;
     
        	try{
        		//Création d'un DefaultHttpClient et un HttpGet permettant d'effectuer une requête HTTP de type GET
        		HttpClient httpClient = new DefaultHttpClient();
        		HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);
        		HttpGet httpGet = new HttpGet();
     
        		//Création de l'URI et on l'affecte au HttpGet
        		URI uri = new URI(url);
        		httpGet.setURI(uri);
     
        		//Execution du client HTTP avec le HttpGet
        		HttpResponse httpResponse = httpClient.execute(httpGet);
     
        		//On récupère la réponse dans un InputStream
        		InputStream inputStream = httpResponse.getEntity().getContent();
     
        		//On crée un bufferedReader pour pouvoir stocker le résultat dans un string
        		bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
     
        		//On lit ligne à ligne le bufferedReader pour le stocker dans le stringBuffer
        		String ligneCodeHTML = bufferedReader.readLine();
        		while (ligneCodeHTML != null){
        			stringBuffer.append(ligneCodeHTML);
        			stringBuffer.append("\n");
        			ligneCodeHTML = bufferedReader.readLine();
        		}    		
     
        	}catch (Exception e){
        		Log.e(LOG_TAG, e.getMessage());
        	}finally{
        		//Dans tous les cas on ferme le bufferedReader s'il n'est pas null
        		if (bufferedReader != null){
        			try{
        				bufferedReader.close();
        			}catch(IOException e){
        	    		Log.e(LOG_TAG, e.getMessage());    				
        			}
        		}
        	}
     
        	//On retourne le stringBuffer
        	return stringBuffer.toString();
        }
    Ca devrait pouvoir t'aider si tu bloques toujours sur le sujet.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut
    tu dois ajouter un fichier .jar a ton projet(properties)
    cherches sur internet httpclient.jar pour android

  4. #4
    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
    Pourquoi faire simple quand on peut faire compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static String getPage(String url) throws ClientProtocolException, IOException {
       		HttpClient httpClient = new DefaultHttpClient();
        		HttpGet httpGet = new HttpGet(url);
        		HttpResponse httpResponse = httpClient.execute(httpGet);
        		return EntityUtils.toString(httpResponse.getEntity());
        }
    Bon... si on veut catcher les exceptions (mais comment signaler les erreurs à l'appelant alors ?) il faut supprimer les "throws", faire un joli try/catch, mais par contre bien utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        } catch (Exception e) {
             Log.e(LOG_TAG, "Erreur récupération HTML",e);
        }
    Sinon on perd la stacktrace.

    Si on veut vraiment s'embêter et passer par des Streams, il faut aussi regarder le "content-type" header, et bien utiliser le bon charset (par défaut ISO-8859-1 pour une page HTML rappelons le). Et surtout, bien les fermer dans un "finally" (là encore ne pas oublier de conserver la stacktrace de l'exception éventuelle lors du close).

  5. #5
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Par défaut Impossible de se connecter au script distant...
    Bonjour,

    Je suis débutant en programmation Android. Avant de poster ce message, je me suis vraiment casser la tête (recherche sur forums divers)... et finalement je n'arrive pas à solutionner mon problème !

    J'essaie de me connecter sur un script php pour récupérer des données de ma table mysql. Sur le navigateur de l'ordinateur, aucun soucis, le script affiche bien ce que j'attends de lui. Par contre, je n'ai aucune connexion depuis mon projet : après maintes tentatives, j'ai compris que je ne dois pas utilisé le Thread UI, alors je me suis tourné vers le service. Rien n'y fait...

    Voici mon code :

    >> MainActivity.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
     
    public class MainActivity extends Activity {
    	Button txt = null;
    	ServiceConnexionSite cnx = null;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		txt = (Button)findViewById(R.id.txt);
     
    		txt.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View arg0) {
    				startService(new Intent(MainActivity.this, ServiceConnexionSite.class));
    			}
    		});
    	}
    }

    >> ServiceConnexionSite.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
    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
     
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
     
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import android.widget.Toast;
     
    public class ServiceConnexionSite extends Service {
    	private HttpClient client = null;
    	private HttpPost httppost = null;
    	private List<NameValuePair> pairs = null;
     
    	@Override
    	public IBinder onBind(Intent intent) {
    		return null;
    	}
     
    	@Override
    	public void onCreate() {
    		client = new DefaultHttpClient();
    		httppost = new HttpPost("http://www.mondomaine.fr/monscript.php");
     
    		pairs = new ArrayList<NameValuePair>();
    		pairs.add(new BasicNameValuePair("key", "value"));
     
    		super.onCreate();
    	}
     
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		try {
    			httppost.setEntity(new UrlEncodedFormEntity(pairs));
    			HttpResponse reponse = client.execute(httppost);
     
    			Toast.makeText(this, "Connexion réussie", Toast.LENGTH_SHORT).show();
    		} catch(Exception e) {
    			Toast.makeText(this, "Connexion non établie", Toast.LENGTH_SHORT).show();
    			e.getMessage();
    		}
     
    		return super.onStartCommand(intent, flags, startId);
    	}
    }


    : ici, je ne traite aucune donnée ; la seule question qui me préoccupe est de savoir pourquoi la connexion ne se fait pas ? Qu'est-ce qui cloche dans mon code, qui ne me permet pas d'accéder à mon script ?

    Merci d'avance !
    Mickael

Discussions similaires

  1. Utilisation de l'API HttpClient et l'API HttpCore
    Par tupac25 dans le forum Général Java
    Réponses: 5
    Dernier message: 29/09/2010, 12h06
  2. Utiliser l'API HTTPClient -Apache-
    Par Sake_reflex dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 11/03/2010, 10h17
  3. poster une requête HTTP on utilisant httpClient ?
    Par feedo dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 02/02/2009, 11h04
  4. Utilisation de HttpClient
    Par Sarah22 dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 07/03/2007, 13h04
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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