无法向lrucache添加项目

时间:2012-12-18 12:46:54

标签: android android-lru-cache

我正在尝试使用LRUcache来缓存我的应用从网上下载的一些图像。我已经从Android开发人员那里阅读了这个教程,但我无法在我的LRUcache上添加任何东西。 这是我的代码,

class myloader extends Activity{ String url;ImageView imview;Bitmap map;LruCache<String, Bitmap> myCache=new LruCache<String, Bitmap> (5*1024*1024)  
    class load extends AsyncTask<String, Void, Bitmap>{
    WeakReference <ImageView> ref=new WeakReference<ImageView>(imview);
    String url2;
    public load(ImageView imageView) {  
        ref = new WeakReference<ImageView>(imageView);
    }

    @Override
    protected Bitmap doInBackground(String... params) {                 
        try {
             u=new URL(params[0]);           
             map=BitmapFactory.decodeStream(u.openConnection().getInputStream(),null,listDimensions());
             myCache.put(url,map);
        } catch (MalformedURLException e) {e.printStackTrace();
        } catch (IOException e) {e.printStackTrace();}
        return map;
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (ref != null) {
            ImageView imageView = ref.get();
            toLoad bitmapDownloaderTask = getBitmapDownloaderTask(imageView);
           if (this == bitmapDownloaderTask) {
                imageView.setImageBitmap(result);
            }
        }
    }  public void download(String theurl,ImageView im) {   url=theurl;  // here i check for lrucache items
    imview=im;
     if (cancelPotentialDownload(url, imview)) {
         toLoad task = new toLoad(imview);
         DownloadedDrawable downloadedDrawable = new DownloadedDrawable(task);
         Bitmap finalBit=myCache.get(url);

         if (finalBit!=null){
             imview.setImageBitmap(finalBit);
         }else{
         imview.setImageDrawable(downloadedDrawable);
         task.execute(url);
         }
        t=myCache.putCount();
     }
}

然后从我的适配器类的getview()调用myloader,传递一个imageview和一个图像url

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。确保您分配的缓存大小足以接受一个元素。如果你试图插入一个太大的元素,LruCache不会抱怨它会无声地失败。