2011-06-17 94 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