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 :

SAX et les timeout


Sujet :

Android

  1. #1
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Bonjour,

    J'utilise SAX pour parser un fichier XML distant via https.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
     
    /* Get the XMLReader of the SAXParser we created. */
    XMLReader xr = sp.getXMLReader();
     
    /* Create a new ContentHandler and apply it to the XML-Reader*/
    SMSResponseHandler xmlHandler = new SMSResponseHandler();
    xr.setContentHandler(xmlHandler);
     
    /* Parse the xml-data from our URL. */
    xr.parse(new InputSource(my12voipURL));
    Le problème, c'est que la page appelée met en général entre 45 secondes et une minute à renvoyer un résultat.

    SAX me répond qu'il n'arrive pas à ouvrir l'url (could not open https://xxx...).

    Donc le readtimeout de SAX (qui semble être par défaut de 20 secondes) est appelé et donc il me dit qu'il arrive pas à ouvrir l'url.

    Comment changer ce readtimeout ?

    J'ai vu exactement ou il est, il est appelé sur la méthode openURL().

    On le voit bien dans ce code :
    http://www.netmite.com/android/mydro...patParser.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urlConnection.setReadTimeout(TIMEOUT);
    Mais je ne sais pas comment le modifier. Je voudrais le mettre à 2 minutes.

    Merci
    Хајде Јано коло да играмо

  2. #2
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Le problème est là :http://www.netmite.com/android/mydro...patParser.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
     
    /**
         * Opens an InputStream for the given URL.
         */
        /*package*/ static InputStream openUrl(String url) throws IOException {
            try {
                URLConnection urlConnection = new URL(url).openConnection();
                urlConnection.setConnectTimeout(TIMEOUT);
                urlConnection.setReadTimeout(TIMEOUT);
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(false);
                return urlConnection.getInputStream();
            } catch (Exception e) {
                IOException ioe = new IOException("Couldn't open " + url);
                ioe.initCause(e);
                throw ioe;
            }
        }
    Le timeout du read est fixé à 20 secondes alors que dans mon cas, j'aurais besoin d'une ou 2 minutes.

    Comment faire?

    Merci
    Хајде Јано коло да играмо

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Dans c'est cas là, tu fais comme a fait lansher1985 dans cette discussion , tu créés une connection vers ce fichier, tu le télécharges (là tu auras le controle sur les timeout), et ensuite, tu envoi le contenu du fichier vers ton parseur SAX.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  4. #4
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Je vais faire comme ça, merci.
    C'est nul SAX, on peut même pas régler les timeout...

    J'hésitais entre reprendre toutes les sources de SAX et les recompiler avec ma modif, ou bien choper le fichier avant. La deuxième solution a l'air plus simple.
    Хајде Јано коло да играмо

  5. #5
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Et hop, ça marche :
    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
     
    InputStream result12voipXMLStream = getUrlDataStream(my12voipURL);
     
        	        		//displayAlert("DEBUG", result12voipXML);
     
    	    	        	/* Get a SAXParser from the SAXPArserFactory. */
    	    	        	SAXParserFactory spf = SAXParserFactory.newInstance();
    	    	        	SAXParser sp = spf.newSAXParser();
     
    	    	        	/* Get the XMLReader of the SAXParser we created. */
    	    	        	XMLReader xr = sp.getXMLReader();
     
    	    	        	/* Create a new ContentHandler and apply it to the XML-Reader*/
    	    	        	SMSResponseHandler xmlHandler = new SMSResponseHandler();
    	    	        	xr.setContentHandler(xmlHandler);
     
    	    	        	/* Parse the xml-data from our URL. */
    	    	        	xr.parse(new InputSource(result12voipXMLStream));
     
    	    	        	//xr.parse(new InputSource(my12voipURL));
     
     
    	    	        	/* Parsing has finished. */
     
    	    	        	/* Our ExampleHandler now provides the parsed data to us. */
    	    	        	ParsedSMSResponseDataSet parsedExampleDataSet =xmlHandler.getParsedData();
     
    ...
     
    public InputStream getUrlDataStream(String url) {
     
     
     
    		try {
     
    			HttpParams httpParams = new BasicHttpParams();
    			HttpConnectionParams.setConnectionTimeout(httpParams, 1000*60*2);
    			HttpConnectionParams.setSoTimeout(httpParams, 1000*60*2);
    			DefaultHttpClient client = new DefaultHttpClient(httpParams);
     
    			//DefaultHttpClient client = new DefaultHttpClient();
    			URI uri = new URI(url);
     
    			HttpGet method = new HttpGet(uri);
     
    			HttpResponse res = client.execute(method);
     
    			return res.getEntity().getContent();
     
     
     
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
     
    		} catch (IOException e) {
    			e.printStackTrace();
     
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
     
    		}
     
    		return null;
     
    }
    Хајде Јано коло да играмо

  6. #6
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Citation Envoyé par SuperCed Voir le message
    Le timeout du read est fixé à 20 secondes alors que dans mon cas, j'aurais besoin d'une ou 2 minutes.

    Comment faire?

    Merci
    Effectivement c'est 20 secondes mais tu peux belle et bien changer cela quand tu bosse avec eclipse.
    Tu peux changer entre 20 seconde à 1200 seconde)

    Pour changer le timeout en eclipse c'est tres simple

    Windows===>Preference==>Ant===> tu met le nombre
    Par exemple moi mon time out c'est 5mn.( Souvent ma connection se perde et revienne donc j'ai preferé 5mn).

  7. #7
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    Effectivement c'est 20 secondes mais tu peux belle et bien changer cela quand tu bosse avec eclipse.
    Tu peux changer entre 20 seconde à 1200 seconde)

    Pour changer le timeout en eclipse c'est tres simple

    Windows===>Preference==>Ant===> tu met le nombre
    Par exemple moi mon time out c'est 5mn.( Souvent ma connection se perde et revienne donc j'ai preferé 5mn).
    Merci, il faudra que j'essaye. Comment ça marche dans le principe?
    Хајде Јано коло да играмо

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

Discussions similaires

  1. [SAX] Sax traduire les messages d'erreur en français
    Par sinur dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 15/02/2011, 14h11
  2. Modifier les timeout d'un edmx
    Par Lucas Panny dans le forum Entity Framework
    Réponses: 4
    Dernier message: 04/01/2011, 07h34
  3. glibmm et les timeout
    Par genteur slayer dans le forum C++
    Réponses: 0
    Dernier message: 22/11/2010, 21h11
  4. Indy et les timeouts
    Par necralbert dans le forum Web & réseau
    Réponses: 1
    Dernier message: 16/07/2007, 18h46
  5. DOM et SAX, où les télécharger ?
    Par olive.m dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/06/2004, 12h15

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