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

  1. #1
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    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 292
    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 292
    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 292
    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 292
    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 292
    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 292
    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.

  7. #7
    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
    C'est bientôt la fin, en trois semaines c'est faisable. Tu as un rapport à faire et une soutenance après ?

  8. #8
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    C'est le genre de truc qu'on peut coder en moins d'une demi journée.
    J'ai déjà fini mon rapport et j'ai préparé mon diaporama depuis longtemps.
    Là j'essaie d'optimiser des trucs et de rendre l'application jolie.

    Par exemple là avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    android:background
    android:listSelector
    J'essaie de faire un effet chouette sur une ListView.
    J'y suis presque.

  9. #9
    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
    C'est sur si on on connait maîtrise les threads ça va vite.

    J'essaie de faire un effet chouette sur une ListView.
    Je me suis pas encore trop intéressé aux animations mais je pense qu'il y a moyen de faire des trucs sympa pour donner une image pro de l'application. J'ai lu pas mal de posts de ta part où tu parles des animations. Je sais où j'irai quand j'en aurai besoin

    Bonne chance pour ta soutenance

  10. #10
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    Là ça n'a rien a voir avec les animations.
    Je voulais juste que quand l'item est clické le background change...
    Je le faisais déjà avant, mais j'avais modifié et du coup ça ne marchait plus.
    Mais c'est d'une facilité déconcertante.

    Dans le layout contenant l'item de la liste view, il faut mettre :
    android:background="@drawable/machin"

    Et dans machin il faut mettre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@drawable/..." />
        <item android:drawable="@drawable/..." />
    </selector>
    C'est tout ce que je voulais faire.

    Et les threads sous Android c'est super simple avec AsyncTask par exemple.

    ==============================================
    J'ai réussi à faire pour que les images ne se chargent qu'une seule fois.
    Par contre je n'arrive pas encore à faire pour modifier le layout depuis l'AsyncTask.

    Mais je viens finir par comprend quel est le problème.

  11. #11
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    Je pense qu'il serait difficile de coder de manière plus sale ce que j'ai fais.

    Cela dit ça fonctionne très bien, mais je pense qu'il doit être possible d'utiliser moins de ressources.
    Parce que là j'ai un ArrayList d'Integer et un ArrayList de Bitmap.

    C'est tellement le cirque ce que je fais, que j'ai même pas envie de l'expliquer.
    En fait tout marchait, mais il me manquait juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    notifyDataSetChanged ();
    Dans mon Adapter j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private class DownloadImageTask extends AsyncTask <String, Void, Bitmap>
    Dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected Bitmap doInBackground(String... urls)
    Je télécharge l'image.

    Et dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected void onPostExecute(Bitmap result)
    Je met l'image et notifyDataSetChanged ().

  12. #12
    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,
    A quoi te sert ton ArrayList d'Integer ?

  13. #13
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    Ahah c'est une excellente question, parce que c'est là qu'on voit le bricolage.

    Dans la méthode où je télécharge l'image, si je n'ai encore jamais essayé de télécharger l'image, je la télécharge mais avant j'ajoute la position de l'item dans une liste, comme ça je sais que cette item est en train d'être téléchargé ou à déjà été téléchargé. Je test avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeAdresse.contains(position)==false
    Avant je regardais si le bitmap était téléchargé, mais en fait la même image pouvait être téléchargé plusieurs fois.

    Parce que je créer un ArrayList de bitmap de la taille du nombre d'item du flux rss.

    Je fais un truc comme ça en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	     protected void onPostExecute(Bitmap result) {
        		 if(result!=null){
        			 listeBitmap.set(position, result);
        			 mImageView.setImageBitmap(listeBitmap.get(position));
        			 notifyDataSetChanged ();
        		 }     		 
    	     }
    ===================================
    Par contre j'arrive pas à ce que l'image s'affiche correctement dynamiquement.
    Je peux lui mettre des LayoutParams et tout ce que tu veux, elle en à rien à faire.

    Par contre quand dans le fichier XML j'indique la taille ça fonctionne correctement.
    D'un côté ça m'arrange bien que je n'y arrive pas du premier coup

  14. #14
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Par contre j'arrive pas à ce que l'image s'affiche correctement dynamiquement.
    Je peux lui mettre des LayoutParams et tout ce que tu veux, elle en à rien à faire.
    Par contre quand dans le fichier XML j'indique la taille ça fonctionne correctement.
    D'un côté ça m'arrange bien que je n'y arrive pas du premier coup
    Tu essayes d'obtenir quoi exactement ( niveau graphique ) ?

  15. #15
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    J'ai trouvé un moyen, dans le layout XML j'ai mis android:visibility="gone".
    Et quand j'affiche l'image je met setVisibility(View.VISIBLE).

    L'effet que je veux avoir, c'est avoir le titre ellipsize maxLines 2 et le texte pareil.
    Et une fois que l'image est chargé paf ! ça se décale et l'image est là.
    Mais du coup c'est bon.

    Je suis un peu déçu de ne pas avoir réussi à le faire avec addView par exemple.
    J'étais dans un LinearLayout avec orientation horizontal, l'index 0 ça devait être tout à gauche.

    C'est la taille qui n'allait pas.
    Enfin bref ça fonctionne maintenant, merci.

  16. #16
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 292
    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 292
    Par défaut
    Re bonjour,
    J'aimerais un conseil sur un algorithme.
    Comment vous, vous feriez pour faire une ListView à partir d'un flux RSS et que parfois il y ait des images qui se chargent ?

    En gros ça ferait ça :
    1 :

    2 :


    Je vais essayer de vous présenter mon algorithme.
    Je parse le flux RSS et je me retrouve avec une ArrayList d'Item.
    J'envoie cette ArrayList à un Adapter.

    Et c'est dans l'Adapter que je fais tout.
    Comme je l'ai déjà dis dans les attributs j'ai une liste de Bitmap et une liste d'Integer.
    Je commence par remplir la liste de Bitmap avec des null (autant qu'il y a d'items dans le flux) .

    Dans getView je regarde si l'item possède une enclosure de type image, si c'est le cas je regarde si la position de l'item est dans la liste d'Integer, si ce n'est pas le cas je lance un DownloadImageTask() avec l'adresse de l'image à télécharger et la position de l'item.
    Else if la liste de bitmap à la position de l'item est différent de null, j'affiche l'image.

    Dans DownloadImageTask() je regarde si la liste d'Integer contient la position de l'item, si ce n'est pas le cas, j'ajoute la position de l'item à la liste d'integer et je télécharge l'image en PostExecute j'ajoute l'image à la liste de Bitmap et j'affiche l'image.

    Je pense que j'explique mal, mais si je montre le code ça va pas être mieux :
    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
    package com.news;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
     
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
     
    import android.os.AsyncTask;
    import android.text.Html;
    import android.util.TypedValue;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
     
    public class NewsAdapter extends BaseAdapter {
     
    	private ArrayList <Item> mListN;
    	private Context mContext;
    	private LayoutInflater mInflater;
    	private ImageView mImageView;
    	private ArrayList <Bitmap> listeBitmap;
    	private ArrayList <Integer> listeAdresse;
    	private LinearLayout layoutZero;
     
    	public NewsAdapter(Context context, ArrayList <Item> aListN) {
            mContext = context;
            mListN = aListN;
            mInflater = LayoutInflater.from(mContext);
            listeBitmap = new ArrayList <Bitmap> ();
            listeAdresse = new ArrayList <Integer> ();   
            if(listeBitmap.size()==0){
            	for(int i=0; i<mListN.size(); i++){
            		listeBitmap.add(null);
            	}	    	
            }
    	}
     
    	public int getCount() {
    		return mListN.size();
    	}
     
    	public Object getItem(int position) {
    		return mListN.get(position);
    	}
     
    	public long getItemId(int position) {
    		return position;
    	}
     
    	public View getView(int position, View convertView, ViewGroup parent) {
     
    		LinearLayout layoutItem = (LinearLayout) mInflater.inflate(R.layout.news_item_img, parent, false);
    		layoutZero = (LinearLayout) layoutItem.findViewById(R.id.linearLayout2);
     
            TextView tv_Titre = (TextView)layoutItem.findViewById(R.id.TV_Titre);
            TextView tv_Texte = (TextView)layoutItem.findViewById(R.id.TV_Texte);    
            mImageView = (ImageView) layoutItem.findViewById(R.id.TV_Image);
     
            tv_Titre.setText(mListN.get(position).getTitle());
            tv_Texte.setText(Html.fromHtml(mListN.get(position).getDescription()));
     
     
            if(mListN.get(position).getEnclosures().size()!=0)
            {
            	if(listeAdresse.contains(position)==false){
            		new DownloadImageTask().execute(mListN.get(position).getEnclosures().get(0).getUrl(), String.valueOf(position));
            	}
            	else if(listeBitmap.get(position)!=null)
            	{
            		mImageView.setImageBitmap(listeBitmap.get(position));
            		layoutZero.setVisibility(View.VISIBLE);    		
            	}
            }
     
            return layoutItem;
    	}
     
    	private class DownloadImageTask extends AsyncTask <String, Void, Bitmap> {
    		int position;
    		protected Bitmap doInBackground(String... urls) {
    			URL ulrn;
    			HttpURLConnection con = null;
    			InputStream is2 = null;
    			Bitmap bitmap=null;
    			position= new Integer(urls[1]);
     
    			if(listeBitmap.get(position)==null && listeAdresse.contains(position)==false)
    			{
    				listeAdresse.add(position);
    				try {
    					ulrn = new URL(urls[0]);
    					con = (HttpURLConnection)ulrn.openConnection();
    						is2 = con.getInputStream();
    						bitmap=BitmapFactory.decodeStream(is2);
    				} catch (MalformedURLException e) {
    					e.printStackTrace();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
     
    				return bitmap;
    			}    
    			else return null;
    		}
     
    		protected void onPostExecute(Bitmap result) {
    			if(result!=null){
    				listeBitmap.set(position, result);
    				mImageView.setImageBitmap(listeBitmap.get(position));
    				layoutZero.setVisibility(View.VISIBLE);
    				notifyDataSetChanged ();
    			}     		 
    		}
    	}
     
    	public interface NewsAdapterListener {
    		public void onClickNews(int position);
    	}	
    }
    =======================================================
    Est-ce que vous avez des objections quant à cette manière de faire ?
    Comment je pourrais proprement avoir ce tableau de Bitmap ailleurs dans l'application ?
    Parce que le mettre en static ce serait un peu sale...

    =======================================================
    J'ai trouvé une solution, je n’utilise plus de tableau de Bitmap.
    J'ajoute le Bitmap directement dans la liste d'Items.
    Enfin j'expliquerais, je crois que je vais créer un topic pour expliquer comment faire un lecteur de flux RSS de A à Z, mais ce sera un peu une blague.

+ 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