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

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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 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
    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();
    }

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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 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
    Oui, mais il doit y avoir une trace désormais dans le logcat
    avec, comme je le subodore un "NetworkOnMainThreadException"

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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 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
    Il manque un 'host' à HttpGet....

    Quelle est l'url passée ?

+ 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