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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    Par défaut
    testé tout l'après midi sans grande réussite....

    j'en suis revenu à mon code inital modifié et je ne comprends pas qu'il tourne dans une activité "normale" et pas avec celle du google map une idée qui pourrait m'éclairer?

    rappel des codes

    Potaloliste.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
     
    import java.util.ArrayList;
     
    /** Contains getter and setter method for varialbles  */
    public class PotaloListe {
     
    	/** Variables */
    	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);
    	}
    }
    PotaloXMLhandler.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
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class PotaloXMLhandler extends DefaultHandler {
     
    	Boolean currentElement = false;
    	String currentValue = null;
    	public static PotaloListe potaloListe = null;
     
    	public static PotaloListe getSitesList() {
    		return potaloListe;
    	}
     
    	public static void setSitesList(PotaloListe potaloListe) {
    		PotaloXMLhandler.potaloListe = potaloListe;
    	}
     
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
     
    		currentElement = true;
     
    		if (localName.equals("maintag"))
    		{
    			potaloListe = new PotaloListe();
    		} else if (localName.equals("lat")) {
    			String attr = attributes.getValue("lng");
    			potaloListe.setlng(attr);
    		}
     
    	}
     
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
     
    		currentElement = false;
     
    		if (localName.equalsIgnoreCase("name"))
    			potaloListe.setname(currentValue);
    		else if (localName.equalsIgnoreCase("lat"))
    			potaloListe.setlat(currentValue);
    		else if (localName.equalsIgnoreCase("lng"))
    			potaloListe.setlng(currentValue);
    		else if (localName.equalsIgnoreCase("heure"))
    			potaloListe.setheure(currentValue);
    		else if (localName.equalsIgnoreCase("litrage"))
    			potaloListe.setlitrage(currentValue);
    		else if (localName.equalsIgnoreCase("voile"))
    			potaloListe.setvoile(currentValue);
     
    	}
     
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
     
    		if (currentElement) {
    			currentValue = new String(ch, start, length);
    			currentElement = false;
    		}
     
    	}
     
    }
    et là où ca plante :

    MainCopainsActivity.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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
     
     
    import java.net.URL;
     
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
     
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
     
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.BitmapDescriptorFactory;
    import com.google.android.gms.maps.model.CameraPosition;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.Marker;
    import com.google.android.gms.maps.model.MarkerOptions;
    import com.lpc.android.R;
     
     
    public class MainCopainsActivity extends FragmentActivity  {
     
     
    	protected GoogleMap map; 
     
        private static final LatLng CENTRE = 
                new LatLng(43.7,-01.4);
     
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.positioncopains);
     
            	map = ((SupportMapFragment) getSupportFragmentManager()
         		   .findFragmentById(R.id.map)).getMap();         
             CameraPosition cameraPosition = new CameraPosition.Builder()
             .target(CENTRE) 
             .zoom(9)   
             .bearing(0)
             .build();  
         map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
     
        		   if (map == null) {
        	            Toast.makeText(this, "Google Maps non disponible", 
        	                Toast.LENGTH_LONG).show();
           }
            }   
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.maincopains, menu);
            return true;
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
     
    		switch (item.getItemId()) {
     
            case R.id.menu_sethybrid:
                map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                break;
     
            case R.id.menu_setnormal:
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                break;   
     
            case R.id.menu_voirpotes:
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
     
                PotaloListe potaloListe = null;
     
        		String name[];
        		String lat[];
        		String lng[];
        		String heure[];
        		String litrage[];
        		String voile[];
     
        		try {
        			SAXParserFactory spf = SAXParserFactory.newInstance();
        			SAXParser sp = spf.newSAXParser();
        			XMLReader xr = sp.getXMLReader();
        			URL sourceUrl = new URL(
        					"http://www.mondomain.com/test.xml");
        			PotaloXMLhandler potaloXMLhandler = new PotaloXMLhandler();
        			xr.setContentHandler(potaloXMLhandler);
        			xr.parse(new InputSource(sourceUrl.openStream()));
     
        		} catch (Exception e) {
        			System.out.println("XML Parsing Exception = " + e);
        		}
     
        		// Get result from PotaloXMLhandler potaloliste 
        		potaloListe = PotaloXMLhandler.potaloListe;
     
        		for (int i = 0; i < potaloListe.getname().size(); i++) {
     
        		name = new String[potaloListe.getname().size()];
        		lat = new String[potaloListe.getlat().size()];
        		lng = new String[potaloListe.getlng().size()];
        		heure = new String[potaloListe.getheure().size()];
        		litrage = new String[potaloListe.getlitrage().size()];
        		voile = new String[potaloListe.getvoile().size()];
     
     
        			final StringBuilder msg = new StringBuilder("\n"); 
        	        msg.append("\n"+potaloListe.getname().get(i));	
        	        msg.append("|"+potaloListe.getlat().get(i));
        	        msg.append("|"+potaloListe.getlng().get(i));
        	        msg.append("|"+potaloListe.getheure().get(i));
        	        msg.append("|"+potaloListe.getlitrage().get(i));
        	        msg.append("|"+potaloListe.getvoile().get(i));
     
        	        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
               }             
     
     
                    break;  
     
            case R.id.menu_mylocation:
     
            	System.exit(0);
             break;
     
     
            }
            return true;
          }
    }
    ca y est je deviens chauve ^^

  8. #8
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    PotaloListe :

    Je te suggère de renommer (via l'outil de refactoring de ton IDE) les méthodes set* en add*. Si l'application s'inscrit dans la durée, la prochaine personne reprenant le code sera intégralement perdue en voyant un setter ne pas faire le boulot d'un setter.

    P'tite remarque : préférer déclarer par des interfaces plutôt que par des types concret quand c'est possible. Déclarer en "List" permet de changer d'implémentation de List sans avoir beaucoup de chose à faire.

    MainCopainsActivity :

    L'application ne plante pas sur animateCamera dans le onCreate ? Tout ce qui touche à l'animation de la Camera nécessitent que la carte soit pleinement chargée. Plutôt préférer un moveCamera lorsque l'on est dans un état incertain, et un animateCamera lorsque l'on sait que la carte est chargée.

    D'ailleurs, ce code-là :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
     
        		   if (map == null) {
        	            Toast.makeText(this, "Google Maps non disponible", 
        	                Toast.LENGTH_LONG).show();
           }

    Ne fonctionne pas et fera une belle NPE lorsque map sera null, puisqu'elle est utilisée avant le test, et sans assurance de "non-nullité". L'IDE devrait l'indiquer avec les bons warning d'ailleurs.

    Ce code-ci aussi présente un problème :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        		try {
        			SAXParserFactory spf = SAXParserFactory.newInstance();
        			SAXParser sp = spf.newSAXParser();
        			XMLReader xr = sp.getXMLReader();
        			URL sourceUrl = new URL(
        					"http://www.mondomain.com/test.xml");
        			PotaloXMLhandler potaloXMLhandler = new PotaloXMLhandler();
        			xr.setContentHandler(potaloXMLhandler);
        			xr.parse(new InputSource(sourceUrl.openStream()));
     
        		} catch (Exception e) {
        			System.out.println("XML Parsing Exception = " + e);
        		}

    Appel réseau dans le thread principal. Passera pour Android 2.2 et 2.3, mais crashera sous Android 3.0+. Il est impératif de passer tout traitement long dans un appel asynchrone (bonne pratique générale informatique).
    L'erreur aussi devrait plutôt être loggée via Log.e(TAG, e.getMessage, e);. System.out.println ne donne aucune garantie qu'il fera sa sortie dans le LogCat.

    Le reste du code devrait aussi se situer dans le try, pour le cas où le parsing foire, PotaloXMLhandler.potaloListe est null, et entraînera donc une NPE.

    Je me demande si ton code ne lève justement pas une exception lors du parsing, qui n'est pas visible à cause du Sout...
    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

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 39
    Points
    39
    Par défaut
    en fait le code fonctionne mais seulement en tache asynchrone je posterai le fichier final en fin d'après midi pour ceux que ca interesse.

  10. #10
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ben oui, normal qu'il fonctionne uniquement en tâche asynchrone ^^
    En synchrone, il ne doit pas fonctionner en levant une NetworkOnMainThreadException
    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