在LinkedHashMap上使用put方法的NullpointerException

时间:2011-06-17 16:49:07

标签: android hashmap nullpointerexception put linkedhashmap

我正在使用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方法导致nullpointer异常的原因。我100%肯定,键和值不是空值。

任何帮助将不胜感激。

-f4

1 个答案:

答案 0 :(得分:1)

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