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 :

Problème requête GetHTML


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut Problème requête GetHTML
    Bonjour à tous !

    J'essaie de faire une requête GetHTML afin de récupérer, en local, un fichier html et l'afficher dans une webview (j'adapterai le code pour qu'il s'adapte à un serveur un peu plus tard). Ce code ne me retourne aucune erreur, cependant je n'ai rien qui s'affiche à l'écran. J'ai également essayé avec 10.0.0.2, cela ne donne aucun résultat non plus. Des idées, suggestions, critiques ?

    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
     
    public class SearchActivity extends Activity {
     
    	public static String getFile(String url) throws ClientProtocolException, IOException, URISyntaxException 
    	{
    		StringBuffer stringbuffer = new StringBuffer("");
    		BufferedReader bufferedreader = null;
     
    		try
    		{	
    			//allow HTTPGet request
    			HttpClient httpclient = new DefaultHttpClient(); 
    			HttpGet httpget = new HttpGet(); 
     
    			URI uri = new URI(url); 
    			httpget.setURI(uri);
     
    			HttpResponse httpresponse = httpclient.execute(httpget); //execute HTTP client
     
    			InputStream inputstream = httpresponse.getEntity().getContent(); //put the response in a Inputstream
     
    			bufferedreader = new BufferedReader(new InputStreamReader(inputstream)); 
     
    			String ligneCode = bufferedreader.readLine(); //read the buffer line by line and stock it in stringbuffer
    			while (ligneCode != null)
    			{
    				stringbuffer.append(ligneCode);
    				stringbuffer.append("\n");
    				ligneCode = bufferedreader.readLine();
    			}
    		}
    		catch (Exception e)
    		{
    			System.out.println("error");
    		}
    		finally //in all cases close the buffer if != null
    		{
    			if (bufferedreader != null)
    			{
    				try
    				{
    					bufferedreader.close();
    				}
    				catch (IOException e)
    				{
    					System.out.println("error : ");
    				}
    			}
    		}
    		return stringbuffer.toString();				
    	}
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.search);
     
    	final WebView webView = (WebView)findViewById(R.id.webView);
    	WebSettings webSettings = webView.getSettings();
     
    	try
    	{
    		String file = getFile("http://127.0.0.1/Maison%20du%20Riz%20360/C1416-MaisonduRiz-M7912-01_html5.html");
    		webSettings.setJavaScriptEnabled(true);
    		webView.loadUrl(file);
    	}
    	catch (IOException e) 
    	{
    		e.printStackTrace();
    	}
    	catch (URISyntaxException e) 
    	{
    		e.printStackTrace();
    	}	
    }
     
     
     
    	public boolean onCreateOptionsMenu (Menu menu) {
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;
     
    }
    }
    Merci d'avance

  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
    Normal qu'il ne retourne aucune erreur vu qu'elles sont toutes catchées et passées sous silence ^^

    D'ailleurs je suis étonné qu'Eclipse ne dise rien quant aux exceptions déclarées par la fonction mais inutiles....
    Mes remarques en "rouge"

    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
    public static String getFile(String url) throws ClientProtocolException, IOException, URISyntaxException 
    	{
    // Inutile de passer ""
    		StringBuffer stringbuffer = new StringBuffer("");
    		BufferedReader bufferedreader = null;
     
    		try
    		{	
    			//allow HTTPGet request
    			HttpClient httpclient = new DefaultHttpClient(); 
    			HttpGet httpget = new HttpGet(); 
     
    			URI uri = new URI(url); 
    // Autant créer l'objet HttpGet ici avec l'URI
    			httpget.setURI(uri);
     
    			HttpResponse httpresponse = httpclient.execute(httpget); //execute HTTP client
     
    			InputStream inputstream = httpresponse.getEntity().getContent(); //put the response in a Inputstream
     
    // Le code suivant ne prends pas en charge les divers 'encoding' possible (et charset)
    			bufferedreader = new BufferedReader(new InputStreamReader(inputstream)); 
     
    			String ligneCode = bufferedreader.readLine(); //read the buffer line by line and stock it in stringbuffer
    			while (ligneCode != null)
    			{
    				stringbuffer.append(ligneCode);
    				stringbuffer.append("\n");
    				ligneCode = bufferedreader.readLine();
    			}
    		}
    		catch (Exception e)
    		{
    // C'est ici que toutes les erreurs sont passées sous silence
    			System.out.println("error");
    		}
    		finally //in all cases close the buffer if != null
    		{
    			if (bufferedreader != null)
    			{
    				try
    				{
    					bufferedreader.close();
    				}
    				catch (IOException e)
    				{
    					System.out.println("error : ");
    				}
    			}
    		}
    		return stringbuffer.toString();				
    	}
    Voici un code de remplacement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static String getFile(String url) throws IOException
    {
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpGet httpget = new HttpGet(url); // will throw IllegalArgumentException if url is badly formed
     
        HttpResponse httpresponse = httpclient.execute(httpget);
        if (httpresponse.getStatusLine().getStatusCode() >= 400)
            throw new IOException(httpresponse.getStatusLine().getReasonPhrase());
        return EntityUtils.toString(httpresponse.getEntity());
    }
    On remarquera qu'il n'y a aucun try/catch...

    Et voila... maintenant... ce code va lever une exception, très probablement un NetworkOnMainThreadException puisque toute opération longue (> quelques millisecondes), et donc en particulier les appels réseaux doivent être fait dans un thread à part... Je te laisse regarder du coté de AsyncTask....

    Par contre, ne pas oublier de gérer correctement les exceptions, c'est à dire ne jamais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
       ....
    } catch (Exception ex) {
       ex.printStackTrace();  // ou System.out.println(ex);
    }
    mais plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try {
       ...
    } catch (Exception ex) {
       // on fait un vrai log dans le logcat avec toute la stack
       Log.e("GetFile","Erreur de récupération ...",ex);
       // on indique aussi l'erreur à l'utilisateur.
       Toast.makeToast(this,ex.getLocalizedMessage(),Toast.LONG).show();
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ta réponse aussi détaillée !

    Malheureusement, je ne reçoit toujours rien, je rentre toujours dans le catch ...

  4. #4
    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
    Oui, mais il doit y avoir une trace désormais dans le logcat
    avec, comme je le subodore un "NetworkOnMainThreadException"
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    En effet, pas mal d'erreurs détectées via LogCat.
    Voici le log, j'ai filtré les erreurs pour plus de clarté.

    10-20 19:38:18.468: E/GetFile(378): Erreur de récuperation...
    10-20 19:38:18.468: E/GetFile(378): java.lang.IllegalStateException: Target host must not be null, or set in parameters.
    10-20 19:38:18.468: E/GetFile(378): at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:578)
    10-20 19:38:18.468: E/GetFile(378): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
    10-20 19:38:18.468: E/GetFile(378): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    10-20 19:38:18.468: E/GetFile(378): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    10-20 19:38:18.468: E/GetFile(378): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    10-20 19:38:18.468: E/GetFile(378): at immomap.lu.SearchActivity.getFile(SearchActivity.java:45)
    10-20 19:38:18.468: E/GetFile(378): at immomap.lu.SearchActivity.onCreate(SearchActivity.java:61)
    10-20 19:38:18.468: E/GetFile(378): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    10-20 19:38:18.468: E/GetFile(378): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
    10-20 19:38:18.468: E/GetFile(378): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
    10-20 19:38:18.468: E/GetFile(378): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
    10-20 19:38:18.468: E/GetFile(378): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
    10-20 19:38:18.468: E/GetFile(378): at android.os.Handler.dispatchMessage(Handler.java:99)
    10-20 19:38:18.468: E/GetFile(378): at android.os.Looper.loop(Looper.java:126)
    10-20 19:38:18.468: E/GetFile(378): at android.app.ActivityThread.main(ActivityThread.java:3997)
    10-20 19:38:18.468: E/GetFile(378): at java.lang.reflect.Method.invokeNative(Native Method)
    10-20 19:38:18.468: E/GetFile(378): at java.lang.reflect.Method.invoke(Method.java:491)
    10-20 19:38:18.468: E/GetFile(378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    10-20 19:38:18.468: E/GetFile(378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    10-20 19:38:18.468: E/GetFile(378): at dalvik.system.NativeStart.main(Native Method)
    Peux tu m'en dire un peu plus ?

    Merci encore pour tes réponses =)

  6. #6
    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
    Il manque un 'host' à HttpGet....

    Quelle est l'url passée ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    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
    public class SearchActivity extends Activity {
     
    	public static String getFile(String url) throws IOException
    	{
    	    HttpClient httpclient = new DefaultHttpClient(); 
    	    HttpGet httpget = new HttpGet(url); // will throw IllegalArgumentException if url is badly formed
     
    	    HttpResponse httpresponse = httpclient.execute(httpget);
    	    if (httpresponse.getStatusLine().getStatusCode() >= 400)
    	        throw new IOException(httpresponse.getStatusLine().getReasonPhrase());
    	    return EntityUtils.toString(httpresponse.getEntity());
    	}
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.search);
     
    	final WebView webView = (WebView)findViewById(R.id.webView);
    	WebSettings webSettings = webView.getSettings();
     
    	try
    	{
    		String file = getFile("http://10.0.2.2/MaisonduRiz360/C1416-MaisonduRiz-M7912-01_html5.html");
    		webSettings.setJavaScriptEnabled(true);
    		webView.loadUrl(file);
    	}
    	catch (Exception ex)
    	{
    		Log.e("GetFile", "Erreur de récuperation...", ex);
    		Toast.makeText(this, "erreur de récupération du fichier", Toast.LENGTH_LONG).show();
    	}
    }	
     
    	public boolean onCreateOptionsMenu (Menu menu) {
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;	
    }
    }
    "http://10.0.2.2/MaisonduRiz360/C1416-MaisonduRiz-M7912-01_html5.html" est l'url passée, j'ai également essayé avec "http://www.google.fr" et d'autres, mais je n'ai toujours rien.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Bon alors si mes recherches ont été fructueuses, cela provient du fait qu'il ne faille pas que ce soit le thread principal qui gère ceci. AsyncTask revient assez souvent dans les discussions sur ce sujet.
    Mais après quelques essais, toujours rien. Je commence à croire que je m'y prend comme un pied !

  9. #9
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par fullmetalkeke Voir le message
    Bon alors si mes recherches ont été fructueuses, cela provient du fait qu'il ne faille pas que ce soit le thread principal qui gère ceci.
    Donc nicroman avait bien subodoré Je lui met +1 pour le coup.
    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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Et pour ma part, problème résolu.

    Merci encore !

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

Discussions similaires

  1. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  2. erreur3073 Problème requête
    Par amel123456789 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2004, 10h15
  3. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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