NullpointerException с использованием метода put для LinkedHashMap - PullRequest
1 голос
/ 17 июня 2011

Я использую 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

1 Ответ

1 голос
/ 01 февраля 2012

Как сказал Майк, проблема может быть связана с попыткой использовать кеш из нескольких потоков. У меня была та же проблема, и я, похоже, исправил ее, убедившись, что все put () произошли из потока пользовательского интерфейса.

...