1

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%確信しています、キーと値はnullではありません。

どんな助けでもありがたいです。

-f4

4

1 に答える 1

1

マイクが言ったように、問題は複数のスレッドからのキャッシュを使おうとすることに関連している可能性があります。私は同じ問題を抱えていて、すべてのput()がUIスレッドから発生したことを確認することで修正したようです。

于 2012-02-01T19:28:50.737 に答える