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 :

Parser du XML en "temps réel"


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut Parser du XML en "temps réel"
    Bonjour,
    J'aimerais savoir si il était possible, de parser un flux RSS et qu'un par un, les items apparaissent dans une ListView.

    Et qu'encore en plus dans ces items RSS, il y a parfois un enclosure qui contient une image et que cette image apparaisse après.

    Je crois que j'ai vu quelqu'un écrire plusieurs fois que SAX ne parsais pas tout d'un coup.
    http://developer.android.com/referen...SAXParser.html

    Et là j'ai vu painless threading :
    http://developer.android.com/resourc...threading.html

    Apparemment dedans il y a des solutions pour créer facilement des thread pour donwloader.

    Pour le moment j'utilise un extends AsyncTask, avec onPreExecute(), doInBackground(), onPostExecute().
    J'ai un progress dialog pendant que tout le flux et que toutes les images se chargent.

    Ce serait chouette de voir une ListView se créer comme ça, bon c'est pas dans le vrai sens de temps réel, mais en tout cas que ça se charge petit à petit.

    Donc voilà si vous avez des éclaircissements ou des conseils, merci de m'en faire part.
    Surtout que si j'arrive à coder vraiment proprement, je pourrais peut être en faire un tuto et ce sera utile à d'autre.

    Au revoir.

    ==============================================
    Edit :
    Bon déjà pour tester j'ai fais un parser SAX, c'est plus compliqué qu'avec DocumentBuilder et pour le moment je ne vois pas l’intérêt.
    Je pense que personne va regarder mais si jamais :
    http://iris.jh.free.fr/moi/android/SAX.zip

    Pour voir si j'ai bien utilisé SAX.

    Comment je pourrais faire pour qu'a chaque item d'RSS parsé, elle apparaisse dans une ListView ?

    Bon sinon je peux faire un LinearLayout par item RSS et l'ajouté à la suite dans un LinearLayout.

    Et faut que je trouve également une solution pour qu'un thread télécharge l'image.

    ===========================================
    Re edit :
    En fait je ne sais pas comment modifier les layouts en dehors d'une Activity.

    Ah mais si je suis con avec le Context d'une Activity, un LayoutInflater un layoutItem il devrait y avoir moyen de faire la même chose que dans un Adapter.

    Bon comme je plante pour l'instant pour ajouter un item à chaque fois qu'il est parsé.

    J'ai essayé d'afficher le titre et la début de la description et les images se chargent en fond.
    Ça fonctionne mais je pense qu'il faut que je fasse comme dans ma précédente application, c'est à dire stocker les Bitmap en mémoire.

    Parce que là c'est chiant, les images se rechargent à chaque fois qu'on se déplace dans la listview.

  2. #2
    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 : 41
    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
    Par défaut
    Salut,

    J'interromps ton monologue ( ) pour t'indiquer deux ou trois conseils :
    - Le parsing SAX à l'avantage d'être très léger en mémoire et en consommation CPU. C'est pour ça qu'il est souvent privilégié dans l'univers mobile.

    - Si tu veux affiché petit à petit tes flux RSS, à mon sesn, là où tu perds du temps c'est dans la récupération des images. Du coup, comme tu l'indiquais, le mieux à faire c'est d'afficher l'ensemble des informations RSS dans ta liste, et de seulement différés (threadé) le chargement des images dans ta liste. Ainsi tu garderas un comportement sympa, pas de grosse lenteur dans ton application, et les vignettes apparaitront petit à petit.

  3. #3
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut
    Ok merci.
    En fait je vais garder le thread + progress dialog que j'ai, le temps de parser le xml avec SAX, ce qui sera cours.

    Puis j'afficherais les images avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private class DownloadImageTask extends AsyncTask <String, Void, Bitmap>
    .

    Là je recherche juste une solution, pour que quand un item contient un enclosure de type image, que l'enclosure soit téléchargé puis stocké.
    Et à chaque fois que l'adapter voudra dessiner une ligne de la ListView il prendra l'image stocké.

    Le fonctionnement d'une ListView est spécial, elle n'est pas dessiné une seule fois, mais à chaque fois qu'on bouge.

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut
    Ben apparemment c'est pas si simple que ça d'afficher des images dans une listview en passant par un Thread, c'est cool ça va m'occuper un moment.

    Et mon parser sax est pas terrible en fait, j'aurais du mettre plus de choses dans public void endElement.

    Et pour l'enclosure je voulais récupéré l'url et pour ça il faut faire ça :
    Dans startElement.

    Enfin je ne sais pas pourquoi je dis ça.

    ==================================================
    J'ai une question : il faut extends ou implements quelle classe pour pouvoir avoir la méthode :
    indexOf (Object object)

    Pour un test pourrie, j'aimerais faire une classe qui contient un int et un Bitmap.
    Et j'aimerais pouvoir récupérer l'index en envoyant un int.

    En fait j'explique mal, imaginons que j'ai :
    1 - bitmap1
    4 - bitmap2
    5 - bitmap3

    J'aimerais en donnant 4 récupérer bitmap2.

    J'ai pensé que je pourrais faire ça aussi :
    1 - bitmap1
    2 - null
    3 - null
    4 - bitmap2
    5 - bitmap3

    Mais c'est trop du bricolage.

    Parce que j'ai des news sans image et des news avec image.
    Et j'aimerais que le téléchargement de l'image ne se fasse qu'une seule fois, donc stocker les bitmpas dans une liste.

    ====================================
    Je vais faire une classe avec un id et un bitmap et juste une méthode qui parcours toute une ArrayList en regardant les id et en retournant la position.
    Ça sera plus simple.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    J'ai déjà eu l'occasion de faire ça.
    Je devais afficher un image et un titre dans une listView. Ces éléments provenaient d'un fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <element>
      <titre>Mon titre</titre>
      <image>url de l'image</image>
    </element>
    J'ai créé une arrayList de bitmap (les images n'étaient pas grosses). Quand je passais dans le getView de l'adapter, je regardais si la bitmap de la liste était nulle. Si oui je lançais un thread (AsyncTask) pour la télécharger (puis je l'enregistre dans l'ArrayList) sinon j'affichais directement l'image contenu dans l'ArrayList maArrayListBitmap.get(position). Je ne sais pas si lancer un thread par image est mieux ou moins bien que de lancer un thread pour les télécharger toutes (petite référence ).
    Ca rendait bien, les images s'affichaient au fur et à mesure et pas forcément dans l'ordre chronologique.

    Bonne chance

  6. #6
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut
    Citation Envoyé par AndroChristophe Voir le message
    J'ai créé une arrayList de bitmap (les images n'étaient pas grosses). Quand je passais dans le getView de l'adapter, je regardais si la bitmap de la liste était nulle. Si oui je lançais un thread (AsyncTask) pour la télécharger (puis je l'enregistre dans l'ArrayList) sinon j'affichais directement l'image contenu dans l'ArrayList maArrayListBitmap.get(position). Je ne sais pas si lancer un thread par image est mieux ou moins bien que de lancer un thread pour les télécharger toutes (petite référence ).
    Ca rendait bien, les images s'affichaient au fur et à mesure et pas forcément dans l'ordre chronologique.
    Ça ressemble beaucoup à ce que je fais actuellement.
    En fait il me reste 3 semaines de stage alors je vais prendre mon temps pour faire ça.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/12/2009, 18h06
  2. [XML] Traiter xml en temps réel avec simple xml
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/12/2007, 20h30

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