我在做图片异步加载,添加缓存的时候为什么containsKey总是返回false 但是caches是有数据的 

解决方案 »

  1.   

     // 判断缓存中是否已经存在该图片   
            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是有数据的 这个是不是和权限有关系?
      

  2.   

    从你给的代码里没看到这个Bitmap被放到caches里。
      

  3.   

    这里有篇双缓存技术的文章,http://my.oschina.net/u/269112/blog/101806
      

  4.   

    有数据是不会错,但是你看下你所要取的那个key在里面有没有对应的数据呢,如果没有那是铁定反回false的啦!
      

  5.   

    这个问题debug下就可以了
      

  6.   

    contains是按对象的equals方法比较的,你需要重写Task类 的 equals方法。