2011-06-17 51 views
1

我正在使用LinkedHashMap作为缓存。我已经重写removeEldestEntry以强制该缓存具有固定大小。旧值将被删除。这是我的地图如何初始化:在LinkedHashMap上使用put方法的NullpointerException

<!-- language: lang-java --> 
    sBackgroundBitmapCache = new LinkedHashMap<String, Bitmap>(backgroundCacheSize) { 
     private static final long serialVersionUID = 287204858147490218L; 

     @Override 
     protected boolean removeEldestEntry(LinkedHashMap.Entry<String, Bitmap> eldest) { 
      if (size() > backgroundCacheSize) { 
       Log.d(TAG, "Removing hash " + eldest.getKey() + " from background cache"); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }; 

所以很明显,我要使用put方法使用该缓存。但我发现了崩溃报告,使用put方法时:

java.lang.NullPointerException 
at java.util.LinkedHashMap.postRemove(LinkedHashMap.java:291) 
at java.util.HashMap.remove(HashMap.java:637) 
at java.util.LinkedHashMap.addNewEntry(LinkedHashMap.java:186) 
at java.util.HashMap.put(HashMap.java:411) 

我一直没能找到原因,使用put方法,可能会导致空指针异常。我100%肯定,关键和价值不是零。

任何帮助将不胜感激。

-F4

+2

你在多个线程中使用'sBackgroundBitmapCache'吗?这听起来像是一个线程同步问题。 – Mike

回答

1

正如迈克说,这个问题可能与尝试使用多个线程缓存。我有同样的问题,似乎已经通过确保所有put()从UI线程发生了修复。

+0

MikE,你是对的,这是一个并发问题。谢谢。 – fr4gus