2010-01-02 10 views
3

comment pouvons-nous html.fromhtml pour charger l'image du Web et placer dans l'imageview?android html.fromhtml pour charger l'image du web

+1

Pouvez-vous préciser si c'est ta question? "Comment télécharger une image sur le Web et l'afficher dans un" ImageView "Android?" –

+0

J'ai supprimé mon ancienne réponse et ajouté un qui traite de votre exigence asynchrone. S'il vous plaît laissez-moi savoir si vous avez des questions. – Ally

Répondre

11

image Asynchronous Téléchargement

La première chose à faire est de vous assurer que vous demandez la permission de télécharger des images à l'intérieur du fichier manifeste. Ensuite, pour télécharger une image à partir du Web, nous devons ouvrir une connexion HTTP, télécharger et renvoyer l'image. Cette méthode devrait aller à l'intérieur de l'activité.

private Bitmap DownloadImage(String URL) 

Ensuite, nous alors ajouter l'image téléchargée à l'ImageView

Bitmap bitmap = DownloadImage("http://www.streetcar.org/mim/cable/images/cable-01.jpg"); 
ImageView img = (ImageView) findViewById(R.id.img); 
img.setImageBitmap(bitmap); 

Cependant, ce n'est pas asynchrone.

Normalement, nous créerions un thread pour faire du travail en arrière-plan, mais un thread ne peut pas mettre à jour une vue qu'il n'a pas créée.

Pour résoudre ce problème, nous pouvons utiliser AsyncTask. J'ai écrit cette petite classe interne qui étend AsyncTask.

class DownloadImagesTask extends AsyncTask<String, Integer, Bitmap> { 

private int imageViewID; 

    protected void onPostExecute(Bitmap bitmap1) { 
    setImage(imageViewID, bitmap1); 
} 

    public void setImageId(int imageViewID) { 
     this.imageViewID = imageViewID; 
    } 

    @Override 
    protected Bitmap doInBackground(String... url) { 
     Bitmap bitmap1 = 
      DownloadImage(url[0]); 
     return bitmap1; 
    } 

}

Les trois types utilisés par AsyncTask sont

  1. Params, le type des paramètres envoyés à la tâche lors de l'exécution.
  2. Progression, le type des unités de progression publiées lors du calcul en arrière-plan.
  3. Résultat, le type du résultat du calcul de l'arrière-plan.

Donc, pour remplacer l'ancien code, nous pouvons maintenant utiliser

DownloadImagesTask task1 = new DownloadImagesTask(); 
task1.setImageId(R.id.img1); 
task1.execute("http://assets.devx.com/articlefigs/39810_1.jpg"); 

Cela a beaucoup plus longtemps que je comptais. Les codes ne sont pas parfaits mais j'espère que ça t'a aidé.

Note: Ceci a été est basé sur Connecting to the web à DevX

Références

+0

Cela semble bien, mais quand j'utilise du code avec listview personnalisé où à chaque listitem avait une icône de ligne images et une nouvelle tâche asynchrone était en cours d'exécution pour afficher l'image pour chaque icône de ligne. Mais les images n'affichent pas correctement l'image de la première rangée à la deuxième rangée et l'image de la deuxième rangée à la première rangée pourquoi est-ce si je passe la référence d'imageview à l'asyntask mais ai toujours le même problème. –

+0

Donc, votre problème initial est résolu? Je ne suis pas vraiment sûr de ce qui se passe. Si vous voulez que je jette un coup d'oeil à votre nouveau problème, puis publiez du code. :) – Ally

+0

Bonne réponse, merci! – Hamy

Questions connexes