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 :

Parsing XML Android API 11


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 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Par défaut Parsing XML Android API 11
    Bonjour,

    j'aimerais avoir un renseignement voir même une solution concernant le parsing de XML.

    En faite, je développe actuellement une application pour tablette Androïd sous l'API 11 et j'essaye de parser mon script XML.

    Concrètement, j'ai déjà réussi à parser du xml pour une ancienne application sous API 8 et lorsque j'ai voulu utiliser le même procédé, j'ai constaté qu'il y avais un soucis au niveau de la méthode parse sur un DocumentBuilder.

    Donc je voulais savoir si quelques chose change entre les APIs inférieur à 11 et la 11 et qui ne me permet plus d'utiliser cette méthode.

    Voici une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DocumentBuilderFactory factory;
    		DocumentBuilder builder;
    		Document xml;
    		String requestURL;
     
    		requestURL = Constantes.interfaceURL + Constantes.getAccountMethod;
    		factory = DocumentBuilderFactory.newInstance();
    		builder = factory.newDocumentBuilder();
    		xml = builder.parse(requestURL);
    J'ai fais un test en mettant API 8 dans le Manifest et cela a fonctionné une fois néanmoins le fait que j'utilise des fragments et le fait que l'application est destiné aux tablettes, ce n'est pas très compatible avec une API 8.

    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
    Les fragments sont compatibles avec l'API-4 par le biais de la support library.
    (il suffit de remplacer Fragment, FragmentActivity et autres par les versions de la librairie de support).

    Par contre... il n'y a aucun changement dans la méthode "parse" (en tout cas pour l'utilisateur).
    Si j'ai bien compris le code fonctionnait sous l'API 8, et ne fonctionne plus sous l'API 11 ?

    Mais ne fonctionne plus dans quel sens ? L'application crashe ? (dans ce cas il nous faut le logcat avec l'exception) ?

    Mon petit doigt me dit que c'est un appel à "parse" directement dans le thread principal (réservé à l'UI). Cela passait (hélas) sous Android pre 3.0 car le système ne vérifiait pas que le programmeur avait bien fait son taf... Par contre le système le vérifie à partir de 3.0 activement en lançant une exception NetworkOnMainThreadException c'est peut-être le soucis....

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut
    Bonjour,

    Je fais aussi parti de l'équipe de développement et j'ai pas mal bosser sur ce problème cette après-midi. Donc j'ai bien compris qu'à partir de l'api 11, en gros, on avait plus le droit de faire les opérations de parsing sur le thread ui car elles sont libellées comme "lourdes" mais je suis tombé sur un autre problème, vraiment bizarre.

    Voici en gros le code, j'ai mis des toast pour m'aider a mieux voir le problème:

    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
    new Thread(){
    			public void run(){
    				Looper.prepare();
    				Toast.makeText(MainActivity.this, "pre", Toast.LENGTH_SHORT).show();
    				try 
    				{
    					Toast.makeText(MainActivity.this, "1", Toast.LENGTH_SHORT).show();
    					accounts = new Accounts();
    					Toast.makeText(MainActivity.this, "2", Toast.LENGTH_SHORT).show();
    				} 
    				catch (Exception e) 
    				{
    					Toast.makeText(MainActivity.this, "Echec telechargement accounts.", Toast.LENGTH_LONG).show();
    				}
    				Toast.makeText(MainActivity.this, "post", Toast.LENGTH_SHORT).show();
    				Looper.loop();
    			}
    		}.start();
    Et voila que les toast m'affiche, dans l'ordre:
    pre
    1
    pre
    1
    2
    post
    2
    post

    Je ne sais pas pourquoi le code est appelé 2 fois dans un certains ordre d'enchevêtrement... du coup certaines données sont parsées 2 fois. Donc à moins de vérifier si elles ont déjà été traitées dans le parsing, je ne comprends vraiment pas comment je peux régler ça...

    Quelqu'un a déjà eu ce problème ?

    PS: On est toujours sur l'api 11 du coup

  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
    Le thread est donc lancé deux fois....

    L'appel de ce code a lieu quand ?



    Donc j'ai bien compris qu'à partir de l'api 11, en gros, on avait plus le droit de faire les opérations de parsing sur le thread ui car elles sont libellées comme "lourdes"
    Non, cela a toujours été interdit depuis l'API 1 (et comme dans tout programme tournant sur un système 'multi-tâche')... l'API-11 fait juste la vérification système que cela n'est vraiment pas fait.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut
    Ces lignes de codes sont juste appelées au début du onCreate d'une activity. Mais je les utilise une seule fois.

  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
    1. Essayes de remplacer les Toasts par des logs.... Difficile de dire comment se comportent plusieurs toasts simultannés....

    Par exemple:
    Log.d("MainActivity.Thread","Preparing");
    ...
    Log.d("MainActivity.Thread","Step 1");
    ...
    Log.d("MainActivity.Thread","Step 2");
    ...
    (dans le catch)
    Log.e("MainActivity.Thread","Echec téléchargement",e);


    (déjà ca évitera de préparer un looper pour le thread...., entre new Thread() et Looper.prepare(), le thread va passer un temps fou à démarrer).
    Log.d("MainActivityThread","Step 1");


    2. Juste avant le "new Thread()", coller un debug:
    Log.d("MainActivity","Starting download thread");


    Ensuite on verra bien ce qu'il y a dans le logcat pour "MainActivity"....

Discussions similaires

  1. Problème parsing XML Android
    Par Invité dans le forum Android
    Réponses: 2
    Dernier message: 18/04/2014, 14h16
  2. Android : versions, parsing xml
    Par frAydjwe dans le forum Android
    Réponses: 10
    Dernier message: 27/05/2011, 14h32
  3. [DOM] Probleme de parsing Xml en java
    Par bolivari dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 25/01/2006, 19h42
  4. parsing xml en francais
    Par ouioui2000 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/10/2005, 17h03
  5. [JSP] Parsing XML avec JDOM
    Par benben13 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/08/2005, 17h19

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