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 :

ImageAdapter en asynchrone, Aucune image !


Sujet :

Android

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut ImageAdapter en asynchrone, Aucune image !
    Bonjour à tous, j'aimerais remplir une Gallery avec des images depuis un flux JSON en asynchrone
    pour faire j'utilise une Classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public class ImageAdapter extends BaseAdapter {
    avec la methode


    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
    public View getView(int position, View convertView, ViewGroup parent) {
    			final ImageView i = new ImageView(this.myContext);
    			String url[] =new String[]{"http://www.anddev.org/images/tiny_tutheaders/weather_forecast.png","http://www.anddev.org/images/tiny_tutheaders/cellidtogeo.png"};
     
    			new AsyncTask<String, Void, Bitmap>() {
     
     
    				private Bitmap bm;
     
    				@Override
    				protected Bitmap doInBackground(String... urls) {
    					/* Open a new URL and get the InputStream to load data from it. */
    					URL aURL;
     
    					try {
    						aURL = new URL(urls[0]);
    						Log.i("URL", urls[0]);
    						URLConnection conn = aURL.openConnection();
    						conn.connect();
    						InputStream is = conn.getInputStream();
    						/* Buffered is always good for a performance plus. */
    						BufferedInputStream bis = new BufferedInputStream(is);
    						/* Decode url-data to a bitmap. */
    						bm = BitmapFactory.decodeStream(bis);
    						bis.close();
    						is.close();
    					} catch (MalformedURLException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
     
    					return bm;
    				}
     
    				@Override
    				protected void onPostExecute(Bitmap result) {
    					if (result != null) {
    						Log.i("result", ""+result);
    						i.setImageBitmap(result);
     
    					}
    				}
     
     
     
    			}.execute(url);
     
     
    			return i;
    		}
    en matiere de test pour essayer de remplir ma liste en asynchrone

    Mais aucune image ne s'affiche ...
    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Par défaut
    Bonjour,

    A ta place je testerai une autre solution, peut-être plus propre (mais pas sûr) :
    Crée ta classe héritant d'ImageView, définit l'image (asynchrone) qu'elle doit afficher (dans le constructeur ?) et fais lui afficher une image par défaut pendant que tu récupères la bonne en arrière plan. Une fois qui tu as reçu celle que tu souhaites afficher, changes-la et invalidate() ton ImageView.
    Ça devrait le faire.

    J'utilise une méthode similaire pour simuler une carte ayant un recto et un verso, et ça marche bien(même dans une GridView).

    Bonne continuation.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    Merci de votre aide.
    J'ai donc essayé de creer une classe qui hérite de ImageView que j'ai nommé
    ImageViewGallery.


    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
    public class ImageViewGallery extends ImageView{
    	ImageView monImageView;
    	private Bitmap bm;
     
    	public ImageViewGallery(Context context) {
    		super(context);
     
     
    		monImageView = new ImageView(context);
     
    		new AsyncTask<String, Void, Bitmap>() {
     
     
     
    			@Override
    			protected Bitmap doInBackground(String... urls) {
    				/* Open a new URL and get the InputStream to load data from it. */
    				URL aURL;
     
     
    					try {
    						aURL = new URL("http://www.anddev.org/images/tiny_tutheaders/droiddraw.png");
    					//	Log.i("URL", urls[0]);
    						URLConnection conn = aURL.openConnection();
    						conn.connect();
    						InputStream is = conn.getInputStream();
    						/* Buffered is always good for a performance plus. */
    						BufferedInputStream bis = new BufferedInputStream(is);
    						/* Decode url-data to a bitmap. */
    						bm = BitmapFactory.decodeStream(bis);
    						bis.close();
    						is.close();
     
    					} catch (MalformedURLException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
     
     
    				return bm;
    			}
     
    			@Override
    			protected void onPostExecute(Bitmap result) {
    				if (result != null) {
    					Log.i("result", ""+result);
    					monImageView.setImageBitmap(result);
     
    				}
    			}
     
     
     
    		}.execute();
     
     
     
     
    	}
    et du coup dans mon getView j'appel directement l'image de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public View getView(int position, View convertView, ViewGroup parent) {	ImageViewGallery monImg=new ImageViewGallery(myContext);
    			return monImg;
    		}
    mais toujours meme problème, il n'y a aucune image .

    Merci

  4. #4
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Par défaut
    En fait quand je parlais de surchager ImageView, c'est pas pour garder un objet ImageView dedans.
    Il faut que tu overrided la méthode onDraw() dans laquelle tu dessines "a la main" avec ton canvas ton image.

Discussions similaires

  1. Chargement Asynchrone d'image dans une liste
    Par Invité dans le forum Android
    Réponses: 4
    Dernier message: 10/05/2010, 16h48
  2. Réponses: 1
    Dernier message: 29/04/2010, 16h00
  3. Aucune image n'apparaît !
    Par galliryc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/06/2009, 17h03
  4. Aucune image ne s'affiche
    Par cedric/copy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/02/2009, 10h31
  5. Réponses: 1
    Dernier message: 22/09/2008, 22h27

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