2011-06-17 22 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メソッドを使用している場合しかし、私は、クラッシュレポートを取得しています:

私は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) 

は、nullポインタ例外が発生することがあります。私は100%確信しています、キーと値はnullsではありません。

ご協力いただければ幸いです。

-F4

+2

複数のスレッドで 'sBackgroundBitmapCache'を使用していますか?このようなサウンドは、スレッド同期の問題になる可能性があります。 – Mike

答えて

1

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

+0

MikEとあなたは正しいです、それは同意問題でした。ありがとう。 – fr4gus

関連する問題