关于异步加载图片并做缓存的问题 我在做图片异步加载,添加缓存的时候为什么containsKey总是返回false 但是caches是有数据的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // 判断缓存中是否已经存在该图片 if(caches.containsKey(path)){ // 取出软引用 SoftReference<Bitmap> rf = caches.get(path); // 通过软引用,获取图片 Bitmap bitmap = rf.get(); // 如果该图片已经被释放,则将该path对应的键从Map中移除掉 if(bitmap == null){ caches.remove(path); }else{ // 如果图片未被释放,直接返回该图片 Log.i(TAG, "return image in cache" + path); return bitmap; } }else{ // 如果缓存中不常在该图片,则创建图片下载任务 Task task = new Task(); task.path = path; task.callback = callback; Log.i(TAG, "new Task ," + path); if(!taskQueue.contains(task)){ taskQueue.add(task); // 唤醒任务下载队列 synchronized (runnable) { runnable.notify(); } } } 这里caches.containsKey(path) 总是返回false ,但是我查了caches是有数据的 这个是不是和权限有关系? 从你给的代码里没看到这个Bitmap被放到caches里。 这里有篇双缓存技术的文章,http://my.oschina.net/u/269112/blog/101806 有数据是不会错,但是你看下你所要取的那个key在里面有没有对应的数据呢,如果没有那是铁定反回false的啦! 这个问题debug下就可以了 contains是按对象的equals方法比较的,你需要重写Task类 的 equals方法。 AsyncTask 如何更新数据到ListView上面 android tab 如何实现拖动一个tab使其移动到其它位置? Android开发环境出错了!请大虾进来指点。 andriod sdk manager下载超级慢只有4KB每秒,360测试下载速度可以达到2.5M的。有什么方法可以解决? amr/3gp 转 mp3/wma Android 模拟器问题---在线等 如何实现QQ登陆界面样式,请教。 安卓多点触屏如何上报触控事件 矩阵图形的移动,,新手,,求大神指导 求一个安卓简单的程序,题目不限。 android里可以做条件编译吗 android pc socket 问题
if(caches.containsKey(path)){
// 取出软引用
SoftReference<Bitmap> rf = caches.get(path);
// 通过软引用,获取图片
Bitmap bitmap = rf.get();
// 如果该图片已经被释放,则将该path对应的键从Map中移除掉
if(bitmap == null){
caches.remove(path);
}else{
// 如果图片未被释放,直接返回该图片
Log.i(TAG, "return image in cache" + path);
return bitmap;
}
}else{
// 如果缓存中不常在该图片,则创建图片下载任务
Task task = new Task();
task.path = path;
task.callback = callback;
Log.i(TAG, "new Task ," + path);
if(!taskQueue.contains(task)){
taskQueue.add(task);
// 唤醒任务下载队列
synchronized (runnable) {
runnable.notify();
}
}
}
这里caches.containsKey(path) 总是返回false ,但是我查了caches是有数据的 这个是不是和权限有关系?