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 :

Probleme en parsant un xml.


Sujet :

Android

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut Probleme en parsant un xml.
    Salut tout le monde

    j'essaie de parser un fichier xml stocké sur un serveur web pour ajouter des marker sur une google map.
    tout marche (google map, menus, ajout d'un marker fixe...) sauf bien sur l'extraction des données.
    J'ai testé le même code sur une mini appli et il tourne nickel mais là ca plante...z'auriez une idée? voici le code qui fait planter

    c'est dans cette partie que ca plante car quand je la met en commentaire tout fonctionne et comme vous pouvez le constater je ne fais que générer un toast pour bien voir si mes données sont là...

    MainCopainsActivity.class

    potalos = Monxmlhandler.potalos;

    name = new String[potalos.getName().size()];
    lat = new double[potalos.getName().size()];
    lng = new double[potalos.getName().size()];
    heure = new String[potalos.getName().size()];
    litrage = new String[potalos.getName().size()];
    voile = new String[potalos.getName().size()];

    for (int i = 0; i < potalos.getName().size(); i++) {
    final StringBuilder msg = new StringBuilder("\n");
    msg.append(""+potalos.getName().get(i));
    msg.append("|"+potalos.getlat().get(i));
    msg.append("|"+potalos.getlng().get(i));
    msg.append("|"+potalos.getheure().get(i));
    msg.append("|"+potalos.getlitrage().get(i));
    msg.append("|"+potalos.getvoile().get(i));

    Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

    }
    potalos.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
    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
     
    import java.util.ArrayList;
     
    public class potalos {
     
    	private ArrayList<String> name = new ArrayList<String>();
    	private ArrayList<String> lat = new ArrayList<String>();
    	private ArrayList<String> lng = new ArrayList<String>();
    	private ArrayList<String> heure = new ArrayList<String>();
    	private ArrayList<String> litrage = new ArrayList<String>();
    	private ArrayList<String> voile = new ArrayList<String>();
     
    	public ArrayList<String> getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name.add(name);
    	}
    	public ArrayList<String> getlat() {
    		return lat;
    	}
    	public void setlat(String lat) {
    		this.lat.add(lat);
    	}
    	public ArrayList<String> getlng() {
    		return lng;
    	}
    	public void setlng(String lng) {
    		this.lng.add(lng);
    	}
    	public ArrayList<String> getheure() {
    		return heure;
    	}
    	public void setheure(String heure) {
    		this.heure.add(heure);
    	}
    	public ArrayList<String> getlitrage() {
    		return litrage;
    	}
    	public void setlitrage(String litrage) {
    		this.litrage.add(litrage);
    	}
    	public ArrayList<String> getvoile() {
    		return voile;
    	}
    	public void setvoile(String voile) {
    		this.voile.add(voile);
    	}
    }
    et mon handler
    monxmlhandler.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
    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.lpc;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class Monxmlhandler extends DefaultHandler {
     
    	Boolean currentElement = false;
    	String currentValue = null;
    	public static potalos potalos = null;
     
    	public static potalos getpotalos() {
    		return potalos;
    	}
     
    	public static void setpotalos(potalos potalos) {
    		Monxmlhandler.potalos = potalos;
    	}
     
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
     
    		currentElement = true;
     
    		if (localName.equals("maintag"))
    		{
    			potalos = new potalos();
    		} else if (localName.equals("lat")) {
    			String attr = attributes.getValue("lng");
    			potalos.setlng(attr);
    		}
     
    	}
     
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
     
    		currentElement = false;
     
    		/** set value */ 
    		if (localName.equalsIgnoreCase("name"))
    			potalos.setName(currentValue);
    		else if (localName.equalsIgnoreCase("lat"))
    			potalos.setlat(currentValue);
    		else if (localName.equalsIgnoreCase("lng"))
    			potalos.setlng(currentValue);
    		else if (localName.equalsIgnoreCase("heure"))
    			potalos.setheure(currentValue);
    		else if (localName.equalsIgnoreCase("litrage"))
    			potalos.setlitrage(currentValue);
    		else if (localName.equalsIgnoreCase("voile"))
    			potalos.setvoile(currentValue);
     
    	}
     
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
     
    		if (currentElement) {
    			currentValue = new String(ch, start, length);
    			currentElement = false;
    		}
     
    	}
     
    }
    bien sur mon MainCopainsActivity.class
    est bien déclaré dans le manifest et le fichier xml accessible durant mes tests

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Si ça plante, tu dois normalement avoir un message dans le LogCat indiquant l'erreur. Quelle est-il ?

    Je parie sur une IndexOutOfBoundsException, vu que tu joues avec des tableaux et leur taille pour le parcours.

    Remarque : convention Java => nom de classes en UpperCamelCase; nom de variable en lowerCamelCase.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut
    salut merci pour ta réponse.
    Hélas non j'ai un null pointer exception sur la ligne
    name = new String[potalos.getName().size()];

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Je serai toi... je changerai la structure de données pour plutôt avoir une List de "potalos", comportant chacun ses propres données, plutôt que de les avoir éparpiller dans X List différentes.

    'Fin, pour la NPE, soit potalos est null, soit name est null. Je parie sur name. Vérifie ton parseur à ce niveau-là, qu'il prenne bien les bonnes infos, soit à l'aide de breakpoints, soit avec des Log.d.

    De plus, tu as potentiellement un autre problème dans celui-ci. La méthode characters est visitée au moins une fois pour avoir le contenu de la balise. Si ce contenu est "trop gros", characters est rappelée autant de fois que nécessaire.

    Citation Envoyé par [url=http://docs.oracle.com/javase/6/docs/api/org/xml/sax/ContentHandler.html]Documentation[/url]
    SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut
    suis entièrement daccord je vais tout réunir dans une seule List et refaire tout le code pour éviter la méthode characters si elle peut poser problème.

    Aurais tu un tuto en tète à me conseiller pour utiliser du XmlPullParser à la place de SAX ou de DOM?

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Utiliser characters implique juste d'utiliser un StringBuilder rempli dedans, et un petit traitement dans startElement et endElement pour savoir où l'on se trouve.

    La doc officielle à un exemple minimaliste : https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
    L'omniprésent Lars Vogel explique un peu plus mais est aussi minimaliste : http://www.vogella.com/articles/AndroidXML/article.html
    Celui-ci à l'air de plus rentrer dans le détail : http://androidstudies.wordpress.com/2013/05/26/xml-processing-with-xmlpullparser/

    Remarque : je n'ai fait que survoler, je n'ai pas remarqué d'incohérence majeure à ce moment-là, mais il est possible qu'il y en ai.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

Discussions similaires

  1. [FLASH MX2004] Problème accent dans un XML
    Par cinetryx dans le forum Flash
    Réponses: 10
    Dernier message: 30/05/2007, 00h26
  2. Problème noeud vide en XML
    Par Booyakha dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2006, 15h53
  3. [Struts] Problème avec struts-config.xml
    Par The_freeman dans le forum Struts 1
    Réponses: 6
    Dernier message: 29/01/2006, 22h55
  4. [XML][XSL]probleme html dans balise xml
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/12/2005, 11h42
  5. Réponses: 2
    Dernier message: 15/04/2005, 09h27

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