我正在尝试使用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
答案 0 :(得分:0)
我遇到了同样的问题。确保您分配的缓存大小足以接受一个元素。如果你试图插入一个太大的元素,LruCache不会抱怨它会无声地失败。