2015-08-19 24 views
-1

下面是我的imageloader代码,如果新的图像是不同的名称,但如果新的图像是相同的名称,但如果新的图像是相同的名称,然后不会更改图像显示旧图像只假设我有图像名称MYIMAGE是显示完美,如果我在具有相同名称的网址添加新的图像,并删除以前我的代码再次显示以前的图像没有表现出应有的缓存是什么在此代码有助于问题的新形象我请我的imageloder没有改变imageview图像如果新的图像相同的名称

private ImageLoader imgLoader; 
private String strUrl = "http://solutionboat.com/work_2/asset/images/rifat.jpg"; 
private String strUrl1 = "http://solutionboat.com/work_2/asset/images/sobin.jpg"; 
private String strUrl2 = "http://solutionboat.com/work_2/asset/images/samol.jpg"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageView target0 = (ImageView) findViewById(R.id.target0); 
    ImageView target1 = (ImageView) findViewById(R.id.target1); 
    ImageView target2 = (ImageView) findViewById(R.id.target2); 




    imgLoader = new ImageLoader(this); 

    imgLoader.displayImage(strUrl, target0); 
    imgLoader.displayImage(strUrl1, target1); 
    imgLoader.displayImage(strUrl2, target2); 


    ViewFlipper flipper = (ViewFlipper) findViewById(R.id.viewFlipper1); 
    flipper.startFlipping(); 


} 

}

ImageLoader class

public class ImageLoader { 

MemoryCache memoryCache = new MemoryCache(); 
FileCache fileCache; 

private Map<ImageView, String> imageViews = 
     Collections.synchronizedMap(new WeakHashMap<ImageView, String>()); 

ExecutorService executorService; 

public ImageLoader(Context context) { 
    fileCache = new FileCache(context); 
    executorService = Executors.newFixedThreadPool(5); 
} 

final int stub_id = R.mipmap.ic_launcher; 

public void displayImage(String url, ImageView imageView) { 
    imageViews.put(imageView, url); 
    Bitmap bitmap = memoryCache.get(url); 
    if(bitmap != null) { 
     imageView.setImageBitmap(bitmap); 
    } else { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(stub_id); 
    } 
} 

private void queuePhoto(String url, ImageView imageView) { 
    PhotoToLoad p = new PhotoToLoad(url, imageView); 
    executorService.submit(new PhotosLoader(p)); 
} 

private Bitmap getBitmap(String url) { 
    File f = fileCache.getFile(url); 

    Bitmap b = decodeFile(f); 
    if(b != null) 
     return b; 

    try { 
     Bitmap bitmap = null; 
     URL imageUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection(); 
     conn.setConnectTimeout(30000); 
     conn.setReadTimeout(30000); 
     conn.setInstanceFollowRedirects(true); 

     InputStream is = conn.getInputStream(); 
     OutputStream os = new FileOutputStream(f); 
     Utils.copyStream(is, os); 
     os.close(); 
     bitmap = decodeFile(f); 
     return bitmap; 
    } catch (Throwable ex) { 
     ex.printStackTrace(); 
     return null; 
    } 

} 

private Bitmap decodeFile(File f) { 
    try { 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     final int REQUIRED_SIZE = 70; 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 

     while(true) { 
      if(width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE) { 
       break; 
      } 

      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

private class PhotoToLoad{ 
    public String url; 
    public ImageView imageView; 
    public PhotoToLoad(String u, ImageView i) { 
     url = u; 
     imageView = i; 
    } 
} 

class PhotosLoader implements Runnable { 

    PhotoToLoad photoToLoad; 

    PhotosLoader(PhotoToLoad photoToLoad) { 
     this.photoToLoad = photoToLoad; 
    } 

    @Override 
    public void run() { 
     if(imageViewReused(photoToLoad)) { 
      return; 
     } 

     Bitmap bmp = getBitmap(photoToLoad.url); 
     memoryCache.put(photoToLoad.url, bmp); 

     if(imageViewReused(photoToLoad)) { 
      return; 
     } 

     BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad); 
     Activity a = (Activity) photoToLoad.imageView.getContext(); 
     a.runOnUiThread(bd); 
    } 
} 

boolean imageViewReused(PhotoToLoad photoToLoad) { 
    String tag = imageViews.get(photoToLoad.imageView); 
    if(tag == null || !tag.equals(photoToLoad.url)) { 
     return true; 
    } 
    return false; 
} 

class BitmapDisplayer implements Runnable { 
    Bitmap bitmap; 
    PhotoToLoad photoToLoad; 

    public BitmapDisplayer(Bitmap b, PhotoToLoad p) { 
     bitmap = b; 
     photoToLoad = p; 
    } 

    @Override 
    public void run() { 
     if(imageViewReused(photoToLoad)) 
      return; 

     if(bitmap != null){ 
      photoToLoad.imageView.setImageBitmap(bitmap); 
     } else { 
      photoToLoad.imageView.setImageResource(stub_id); 
     } 
    } 
} 

public void clearCahce() { 
    memoryCache.clear(); 
    fileCache.clear(); 
} 

}

回答

相关问题