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 :

Requête HTTP vers une page distante


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut Requête HTTP vers une page distante
    bonjour a tous,

    voilaj je creer une appli et debute dans la prog java, je cherche a me connectez a une page php situé sur un serveur pour recuperer des donnees mais je n y arrive pas je vous met le script java que j ai coder et qui ne marche pas il va bien sur la page mais il me met toujours le catch{ ERREUR DE CHARGEMENT}

    je precise j ai bien mis dans le manifeste.xml de l appli l'"autorisation INTERNET.

    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
     
    package com.example.appli;
     
    import java.io.BufferedReader;
     
    import java.io.IOException;
     
    import java.io.InputStreamReader;
     
    import org.apache.http.HttpResponse;
     
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreProtocolPNames;
     
    import android.os.Bundle;
    import android.os.Message;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.app.Activity;
     
     
    public class Produits extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.produits);
     
     
    		String ua = "Mozilla/5.0 (Linux; U; Android 1.0; en-us; generic) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2";
    		System.setProperty("http.keepAlive", "false");	
    		HttpClient httpClient = new DefaultHttpClient();
    		HttpGet get = new HttpGet("http://www.google.com");
    		get.setHeader("User-Agent", ua);
    			try {
     
    				HttpResponse response = httpClient.execute(get);
    				BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
     
    				String text = "";
    			    String line = "";
    			    while ((line = reader.readLine()) != null){
    			            text += line;
    			    }
     
    			    TextView tonEdit = (TextView)findViewById(R.id.test);
    				tonEdit.setText("finalResult :" + text.toString());  
    				reader.close();
     
     
    			}catch (IOException e) { 
    				Toast.makeText(Produits.this,"ERREUR DE CHARGEMENT",Toast.LENGTH_SHORT).show();
     
    			}catch (Exception e) { 
    				Toast.makeText(Produits.this,"ERREUR DE CHARGEMENT",Toast.LENGTH_SHORT).show();
    			}
     
     
     
     
    	}
     
     
     
     
    }
    merci d avance pour votre aide car ca fait 2 jours que je n arrive pas a trouver la solution...

  2. #2
    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
    Deux choses:

    Le Toast est bien (pour prévenir l'utilisateur), mais pour le programmeur pas très utile... Préférer "Log":

    D'autre par le catch(IOException) ne sert à rien ici (puisque fait la même action que le catch générique catch(Exception):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    } catch (Exception e) {
       Log.e("Produits","Erreur lors du chargement",e);
       Toast.makeText(Produits.this,"ERREUR DE CHARGEMENT",Toast.LENGTH_SHORT).show();
    }
    Et voilà, l'exception dans le logcat qui indique très certainement:
    NetworkOnMainThreadException.

    Et comme toujours:
    On ne fait pas d'opération longue (tel un chargement depuis Internet) dans une fonction de l'interface (tel que onCreate, onClick, ...).
    On utilise un Loader, ou au pire, un AsyncTask.
    Quand les données sont chargées, on raffraichit l'interface, (et évenuellement on vire la barre de progression).


    Deuxième chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
     
    				String text = "";
    			    String line = "";
    			    while ((line = reader.readLine()) != null){
    			            text += line;
    			    }
    N'est pas simplement remplacable par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String text = EntityUtils.toString(response.getEntity());
    ?

    Ha... et une troisième chose... que se passe-t-il si le serveur retourne une erreur de style 403, 404, 500, ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    merci pour ta reponse je regarde les infos que tu ma donné .

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut re nicroman
    j ai fait suivi un peu ce que tu m a dis mais ca ne marche pas sa n affiche rien pourrais tu m aider stp...

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    package com.example.bashop2;
     
    import java.io.BufferedReader;
     
    import java.io.IOException;
     
    import java.io.InputStreamReader;
     
    import org.apache.http.HttpResponse;
     
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
     
     
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.app.Activity;
    import android.content.Intent;
     
     
    public class Produits extends Activity {
     
     
     
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.produits);
     
    		new Thread(new Runnable() {
        		@Override
        		public void run() {
     
                	UpdateText();
    	       }
     
     
     
     
                }).start();
     
     
    			///gestion bouton retour produits
    			Button btn4 = (Button) findViewById(R.id.produits_retour);
    			btn4.setOnClickListener( new OnClickListener(){
     
    				@Override
    				public void onClick(View v) {
     
     
    				        Intent intent = new Intent(Produits.this, MainActivity.class);
    						startActivity(intent);
    						 overridePendingTransition(R.anim.fade, R.anim.animation);
     
    				}
     
    			});
     
     
     
     
     
     
    	}
     
     
    	public void UpdateText() {
     
     
    		String ua = "Mozilla/5.0 (Linux; U; Android 1.0; en-us; generic) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2";
    		System.setProperty("http.keepAlive", "false");	
    		HttpClient httpClient = new DefaultHttpClient();
    		HttpGet get = new HttpGet("http://www.google.com");
    		get.setHeader("User-Agent", ua);
    			try {
     
    				HttpResponse response = httpClient.execute(get);
    				BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
     
    				String text = "";
    			    String line = "";
    			    while ((line = reader.readLine()) != null){
    			            text += line;
    			    }
    			    TextView mon = (TextView) findViewById(R.id.test);
    				mon.setText(text);
     
    				reader.close();
     
     
    			}catch (Exception e) { 
     
    			}
     
     
    	}
     
     
     
     
     
     
     
    }

    merci d avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut rere je te remerci pour ton aide :)
    j ai trouver ce qu il faut je pense tu n a pas repondu peut etre est tu occuper je n est pas mis de loader c voulu enfin j aimerai en mettre un en popup natif mais j i travail mais j ai trouver la fonction que tu ma dit,

    parcontre elle ne m affiche rien donc ca vient de la fonction elle meme au nivo de la requete serveur je te met le code en esperant que tu pourras m aider merci d avance

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    package com.example.bashop2;
     
    import java.io.BufferedReader;
     
     
     
    import java.io.InputStreamReader;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.app.Activity;
    import android.content.Intent;
     
     
    public class Produits extends Activity {
     
     
     
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.produits);
     
     
    		//////// AsyncTask ////////
    		maFonction faire=new maFonction();
    		faire.execute();
     
     
     
    			///gestion bouton retour produits
    			Button btn4 = (Button) findViewById(R.id.produits_retour);
    			btn4.setOnClickListener( new OnClickListener(){
     
    				@Override
    				public void onClick(View v) {
     
     
    				        Intent intent = new Intent(Produits.this, MainActivity.class);
    						startActivity(intent);
    						 overridePendingTransition(R.anim.fade, R.anim.animation);
     
    				}
     
    			});
     
     
     
     
     
     
    	}
     
     
    	private class maFonction extends AsyncTask<Void, Integer, Void>
    	{
     
    		@Override
    		protected void onPreExecute() {
     
    			String ua = "Mozilla/5.0 (Linux; U; Android 1.0; en-us; generic) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2";
    			System.setProperty("http.keepAlive", "false");	
    			HttpClient httpClient = new DefaultHttpClient();
    			HttpGet get = new HttpGet("http://www.google.com");
    			get.setHeader("User-Agent", ua);
    				try {
     
    					HttpResponse response = httpClient.execute(get);
    					BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
     
    					String text = "";
    				    String line = "";
    				    while ((line = reader.readLine()) != null){
    				            text += line;
    				    }
     
    				    TextView tonEdit = (TextView)findViewById(R.id.test);
    					tonEdit.setText("finalResult :" + text.toString());  
    					reader.close();
     
     
    				}catch (Exception e) { 
     
    				}
     
     
     
    		}
     
    		@Override
    		protected void onProgressUpdate(Integer... values){
     
    		}
     
    		@Override
    		protected Void doInBackground(Void... arg0) {
     
    			int progress;
    			for (progress=0;progress<=100;progress++)
    			{
    				for (int i=0; i<1000000; i++){}
    				//la méthode publishProgress met à jour l'interface en invoquant la méthode onProgressUpdate
    				publishProgress(progress);
    				progress++;				
    			}	
    			return null;
    		}
     
    		@Override
    		protected void onPostExecute(Void result) {
     
    		}
    	}
     
     
     
     
     
     
     
     
    }

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Par défaut
    La requête Http doit être faite dans la méthode doInBackground() de ton Asyntask. Si tu veux récupérer le résultat de ta requête et le traiter après il te faudra changer le type de paramètre que retourne la méthode Void -> String

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/02/2013, 18h22
  2. Réponses: 8
    Dernier message: 23/09/2011, 15h50
  3. [FLASH MX] Lien d'une animation Flash vers une page html
    Par tinkye_winkye dans le forum Flash
    Réponses: 10
    Dernier message: 19/01/2005, 10h11
  4. [PRO] redirection vers une page
    Par Mister_FX dans le forum ASP
    Réponses: 10
    Dernier message: 23/06/2004, 17h31
  5. Réponses: 13
    Dernier message: 16/04/2004, 12h00

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