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 :

Chargement d'image dynamique


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 42
    Points : 26
    Points
    26
    Par défaut Chargement d'image dynamique
    Bonjour à tous!

    Comme mon titre l'indique, j'ai un probleme de chargement d'images dynamique à partir d'internet.

    J'essaye de faire une galerie d'images (jusque là tout va bien) récupérée sur Internet. Le chargement se fait par une tache asynchrone lors de l'affichage de la vue (des miniatures récupérées au préalable sont affichées en attendant).

    J'utilise cette méthode pour le chargement :

    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
    	private class DownloadImageTask extends AsyncTask<String,Void,Drawable>{
    		@Override
    		protected Drawable doInBackground(String... arg0) {
    			URL url;
    	        InputStream is;
    	        Drawable d=null;
    			try {
    				url = new URL(arg0[0]);
    				is = (InputStream) url.getContent();
    				d = Drawable.createFromStream(is, "src");
    				return d;
    			} catch (MalformedURLException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			return null;
    		}
     
     
    		protected void onPostExecute(Drawable result) {
    			setImage(result);
    		}
    	}
    Mon problème est le suivant : de manière aléatoire (mais environ 7 fois sur 10), pas toujours sur les memes images, j'ai dans mon log le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG/skia(11294): --- decoder->decode returned false
    et mon drawable égal à null.

    Je n'ai aucun problème à charger des thumbnails par la même méthode, j'ai donc pensé que le problème était fonction de la taille de l'image. Pourtant, si je met cette méthode en boucle (sale, mais pour tester), cela fini toujours par passer... J'ai essayé en mettant mes images sur un autre serveur, et j'ai le même problème. Les images font environ 50ko, ce qui n'est pas énorme. Peut-être un buffer de taille limitée pas toujours libéré? je ne sais pas...

    Comme solution alternative, j'ai essayé d'initialiser ma Galery avec des webviews qui se contentaient de loader l'url de ma photo. Les photos se chargent toujours, sans exception, et avec un temps record. Le problème est que je n'ai pas controle sur la manière dont l'image est affichée, et le contrôle est beaucoup moins réactif. Je pensais également télécharger ces images via les webviews et les afficher dans mes imageviews, mais je n'arrive pas à les récuprer...

    Si quelqu'un a une idée sur le pourquoi du problème, ou sur comment le régler? Quelle manière serait la plus efficace? et comment?

    Merci à tous!

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut
    Tu es sur que url.getContent(); est synchrone?
    Dit autrement es tu sur que toutes les données sont téléchargées quand tu utilise le input stream?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Le problème doit en effet venir de là. J'ai remarqué qu'il n'y avait pas de délai entre l'appel de la méthode asynchrone et la lecture de l'InputStream.
    En revanche, si je fait une copie de mon InputStream avec un byte[], cela marche à tous les coups...
    Plutot que de faire cette copie, y'a-t-il moyen de repérer la fin du téléchargement du stream?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

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

Discussions similaires

  1. chargement et affichage dynamique d'une image
    Par developer5 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/03/2011, 18h01
  2. [MooTools] Chargement d'image dynamique
    Par peliphe dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 23/10/2009, 20h31
  3. Chargement d'image lors d'un changement 'dynamique'
    Par Janitrix dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/11/2007, 20h36
  4. chargement image dynamiquement
    Par franc3 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/05/2006, 13h11
  5. Problème de chargement d'image dynamique sous firefox
    Par Tmex dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 08/03/2006, 11h24

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