2017-10-03 7 views
0

maintenant je suis en train de faire chargeur d'image à partir de l'URL, si c'est juste 1 image et ImageView travail bien, mais quand je le fais plus de 1images de charge de l'URL fonctionnent pour la dernière imageview

Les images sont chargées , mais seulement la dernière ImageView étant en cours.

Voici les codes

public class ImageLoader { 
private final String TAG = ImageLoader.this.getClass().getSimpleName(); 

private static ImageLoader imageLoader; 
private Context context = null; 
private String url = ""; 
private Boolean isRound = false; 
private Boolean isCircle = false; 
private int rad = 0, holder = 0, widht = 0, color = 0; 
private ImageView img = null; 

public static ImageLoader init(Context context) { 

    imageLoader = new ImageLoader(); 
    imageLoader.context = context; 

    return imageLoader; 
} 

public ImageLoader load(String url) { 
    imageLoader.url = url; 

    return imageLoader; 
} 

public ImageLoader isRound(boolean bool) { 
    imageLoader.isRound = bool; 
    imageLoader.rad = 4; 

    return imageLoader; 
} 

public ImageLoader isRound(boolean bool, int rad) { 
    imageLoader.isRound = bool; 
    imageLoader.rad = rad; 

    return imageLoader; 
} 

public ImageLoader stroke(int color, int width) { 
    imageLoader.color = ContextCompat.getColor(context, color); 
    imageLoader.widht = width; 

    return imageLoader; 
} 

public ImageLoader stroke(int width) { 
    imageLoader.color = ContextCompat.getColor(context, R.color.c_000000); 
    imageLoader.widht = width; 

    return imageLoader; 
} 

public ImageLoader isCircle(boolean bool) { 
    imageLoader.isCircle = bool; 

    return imageLoader; 
} 

public ImageLoader holder(int holder) { 
    imageLoader.holder = holder; 

    return imageLoader; 
} 

public ImageLoader with(ImageView container) { 

    imageLoader.img = container; 

    return imageLoader; 
} 

public void run() { 

    new GetImageAsync().execute(); 
} 

private class GetImageAsync extends AsyncTask<Void, Bitmap, Bitmap> { 
    URL url_value = null; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     if (imageLoader.holder != 0) { 
      Bitmap bitHolder = BitmapFactory.decodeResource(imageLoader.context.getResources(), imageLoader.holder); 
      if (!isRound) { 
       imageLoader.img.setImageBitmap(bitHolder); 
      } else { 
       imageLoader.img.setImageBitmap(ImageUtil.getRoundedCornerBitmap(bitHolder, imageLoader.color, rad, imageLoader.widht, imageLoader.context)); 
      } 


     } else { 
      if (isRound) { 
       imageLoader.img.setBackgroundResource(R.drawable.blank); 
      } else { 
       imageLoader.img.setBackgroundResource(R.color.c_white); 
      } 

     } 
    } 

    @Override 
    protected Bitmap doInBackground(Void... voids) { 
     Bitmap bitmap = null; 
     try { 
      url_value = new URL(imageLoader.url); 
      bitmap = BitmapFactory.decodeStream(url_value.openConnection().getInputStream()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      bitmap = null; 
     } 

     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     super.onPostExecute(bitmap); 


     if (bitmap == null) { 
      Log.d(TAG, "onPostExecute: Bitmap null"); 
      return; 
     } else { 

      Log.d(TAG, "onPostExecute: Bitmap not null"+imageLoader.img.toString()); 
      Log.d(TAG, "onPostExecute: Bitmap not null"+bitmap.toString()); 
     } 


     if (isRound) { 
      imageLoader.img.setImageBitmap(ImageUtil.getRoundedCornerBitmap(bitmap, imageLoader.color, imageLoader.rad, imageLoader.widht, imageLoader.context)); 
     } else { 
      imageLoader.img.setImageBitmap(bitmap); 
     } 
    } 
} 
} 
+1

Tenir compte en utilisant la bibliothèque comme Glide, Picasso, etc. –

+0

thx conseil ,. : D – HartzDev

Répondre

0

Au lieu d'utiliser la classe Async en classe ImageLoader, l'utiliser dans une catégorie distincte. appeler GetImageAsync() execute(), télécharger toutes les images & dans le post de cette exécution, l'image réglée sur imageview comme ci-dessous:.

ImageLoader imgLoader = new ImageLoader(getApplicationContext()); 
imgLoader.DisplayImage(image_url, image); 
+0

thx, je vais essayer. :RÉ – HartzDev