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

Format d'échange (XML, JSON...) Java Discussion :

Parsage XML distant


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de guillaume40
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 97
    Par défaut Parsage XML distant
    Bonjour,

    Je voudrais parser du XML distant via SAX
    voici à quoi ressemble ma classe pour récupérer les données :
    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
    public class data {
     
    	private XMLReader saxReader;
    	private SimpleContentHandler simpleContentHandler;
     
    	private List<String> citations;
     
    	public data() throws SAXException, IOException, ParserConfigurationException {
     
    		saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
     
            simpleContentHandler = new SimpleContentHandler();
     
            saxReader.setContentHandler(simpleContentHandler);
     
            URL url = new URL("http://www.evene.fr/rss/citation_jour.xml");
    		saxReader.parse(new InputSource(url.openStream()));
     
    	}
     
     
    }
    Et dans mon Activity (je développe pour Android) j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	  try {
    		data d = new data();
    		Log.v("debug", "IT WORK !");
    	} catch (SAXException e) {
    		Log.v("debug", "NOT WORKING ! 1");
    		Log.v("debug", "SAXException : " + e.getMessage());
    		e.printStackTrace();
    	} catch (IOException e) {
    		Log.v("debug", "NOT WORKING ! 2");
    		Log.v("debug", "IOException : " + e.getMessage());
    		e.printStackTrace();
    	}
    L'erreur viendrais de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saxReader.parse(new InputSource(url.openStream()));
    Et les erreurs associées sont :
    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
    10-24 11:11:15.150: E/AndroidRuntime(922): java.lang.RuntimeException: Unable to start activity ComponentInfo{guigui.first.project/guigui.first.project.GuiguiActivity}: android.os.NetworkOnMainThreadException
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread.access$600(ActivityThread.java:122)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.os.Looper.loop(Looper.java:137)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread.main(ActivityThread.java:4340)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.lang.reflect.Method.invoke(Method.java:511)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at dalvik.system.NativeStart.main(Native Method)
    10-24 11:11:15.150: E/AndroidRuntime(922): Caused by: android.os.NetworkOnMainThreadException
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.net.InetAddress.getAllByName(InetAddress.java:220)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at java.net.URL.openStream(URL.java:462)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at guigui.first.project.data.<init>(data.java:46)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at guigui.first.project.GuiguiActivity.onCreate(GuiguiActivity.java:37)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.Activity.performCreate(Activity.java:4465)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    10-24 11:11:15.150: E/AndroidRuntime(922): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
    Si vous avez une idée d'où çà pourrait venir.

    Merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah le nom de l'exception est plutôt explicite:

    NetworkOnMainThreadException
    Si ça ne te mets pas sur la piste...

    Juste pour rappel, en développent d'application Graphique, toute tâche lourde doit être faite dans un Thread séparé de celui s'occupant du rendu de l'application, sous peine de bloquer celui ci.

    Certains toolkits sont permissifs, et laissent la possibilité de faire des saloperie dans le thread UI, et donc bloquant totalement l'application. D'autres mettent des limitations fortes. Or tu viens de tomber sur une de ces limitations (pas de connexions réseau dans le thread UI).

  3. #3
    Membre confirmé Avatar de guillaume40
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 97
    Par défaut
    Ok merci beaucoup.
    Je vais voir comment je peux m'en sortir

  4. #4
    Membre confirmé Avatar de guillaume40
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 97
    Par défaut
    Je ne comprend pas pourquoi d'aprés ce tuto là : http://thibault-koprowski.fr/2010/10...-sous-android/
    il peut réussir à parser un flux XML sans utiliser de thread, est-ce suite aux mises à jour du SDK apporté depuis 2010 ?

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

Discussions similaires

  1. Traitement d'un fichier XML distant
    Par slytech dans le forum ASP
    Réponses: 5
    Dernier message: 17/11/2006, 11h09
  2. Appel et traitement d'un XML distant
    Par toutoune60 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 22/10/2006, 22h13
  3. [XSLT] Appliquer un traitement xslt sur un fichier XML distant
    Par mabig dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2006, 09h38
  4. Réponses: 2
    Dernier message: 17/12/2005, 20h07
  5. [DOM] Parsage XML en PHP 4
    Par Huntress dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/12/2005, 22h24

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