我使用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方法可能会导致空指针异常。我百分之百确定,key和value不是空值。
任何帮助都将不胜感激。
-f4
发布于 2012-02-02 03:28:51
正如Mike所说,这个问题可能与试图从多个线程使用缓存有关。我也遇到了同样的问题,通过确保所有的put()都发生在UI线程中,我似乎已经解决了这个问题。
https://stackoverflow.com/questions/6389062
复制相似问题