我使用 LinkedHashMap 作为缓存。我已覆盖 removeEldestEntry 以强制此缓存具有固定大小。旧值将被删除。这就是我的地图的初始化方式:
<!-- 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