2010-11-20 6 views
0

Dans mon application Android, je souhaite mettre à jour un ImageView, avec une image spécifiée à partir d'une URL. Cette URL a été récupérée via une API dans le cadre d'un AsyncTask.Mise à jour d'une ImageView avec une image à partir d'une URL

J'ai défini le ImageView comme suit:

<ImageView 
    android:adjustViewBounds="true" 
    android:scaleType="fitCenter" 
    android:layout_height="wrap_content" 
    android:id="@+id/product_image" 
    android:src="@drawable/no_product_image" 
    android:layout_marginRight="6dip" 
    android:layout_width="wrap_content" 
    /> 

De cette façon, tandis que le chargement des données, il y a une image vierge présente derrière un ProgressDialog.

Dans le cadre du doInBackground du AsyncTask, après la récupération des détails de ce produit, je l'appelle:

private void createProductScreen(Product product){ 
     Log.i(TAG, "Updating product screen"); 

     //Set the product image 
     ImageView imgView =(ImageView)findViewById(R.id.product_image); 
     Drawable drawable = loadImageFromWeb(product.getImageUrl()); 
     imgView.setImageDrawable(drawable); 
     Log.i(TAG, "Set image"); 
} 

L'image est en cours de téléchargement à partir du Web comme suit:

private Drawable loadImageFromWeb(String url){ 
     Log.i(TAG, "Fetching image"); 
     try{ 
      InputStream is = (InputStream) new URL(url).getContent(); 
      Drawable d = Drawable.createFromStream(is, "src"); 
      Log.i(TAG, "Created image from stream"); 
      return d; 
     }catch (Exception e) { 
      //TODO handle error 
      Log.i(TAG, "Error fetching image"); 
      System.out.println("Exc="+e); 
      return null; 
     } 
    } 

Lorsque cela fonctionne, je voir "Image créée à partir du flux" dans le journal, mais ne pas voir "Définir l'image" et l'onPostExecute de la tâche asynchrone n'est jamais appelée.

Est-ce que quelqu'un a des idées sur la question ou une meilleure façon de mettre à jour l'image de l'image vide à l'image du produit?

+0

http://www.androidhive.info/2012/07/android-loading-image-from-url-http/ Suivez ce post. Je pense que vous devez ajouter des classes personnalisées et la fonction à partir de laquelle vous pouvez implémenter pour charger l'image ou les images. – ishtiyaqm15

Répondre

2

Vous devriez obtenir une exception puisque vous essayez de définir ImageView dans un thread séparé. imgView.setImageDrawable(drawable); doit être appelée dans le même thread UI. Puisque vous utilisez la classe AsyncTask, le bon endroit pour définir l'objet imageview est dans la méthode onPostExecute. -vous changer la logique d'une manière que le doInBackground va retourne l'objet Drawable à la méthode onPostExecute, utilisez-le appeler imgView.setImageDrawable(drawable);

0

Set Imageview à l'image drawable

Drawable drawable = loadImageFromWeb(product.getImageUrl()); 

est problème.

Drawable drawable = loadImageFromWeb(XXXXUrl); 
Imageview.setImageDrawable(drawable); 

Donnez une URL correcte à dessiner.

Questions connexes