我正在尝试在Android中使用ehCache,并收到以下错误
java.lang.ExceptionInInitializerError
at net.sf.ehcache.EhcacheDefaultClassLoader.getInstance(EhcacheDefaultClassLoader.java:29)
at net.sf.ehcache.config.Configuration.<init>(Configuration.java:208)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:103)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:140)
at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:892)
at net.sf.ehcache.CacheManager.create(CacheManager.java:873)
at net.sf.ehcache.CacheManager.getInstance(CacheManager.java:907)
Caused by: java.lang.NullPointerException: parentLoader == null && !nullAllowed
at java.lang.ClassLoader.<init>(ClassLoader.java:210)
at java.lang.ClassLoader.<init>(ClassLoader.java:202)
at net.sf.ehcache.EhcacheDefaultClassLoader.<init>(EhcacheDefaultClassLoader.java:35)
at net.sf.ehcache.EhcacheDefaultClassLoader.<clinit>(EhcacheDefaultClassLoader.java:26)
at net.sf.ehcache.EhcacheDefaultClassLoader.getInstance(EhcacheDefaultClassLoader.java:29)
at net.sf.ehcache.config.Configuration.<init>(Configuration.java:208)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:103)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:140)
at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:892)
at net.sf.ehcache.CacheManager.create(CacheManager.java:873)
at net.sf.ehcache.CacheManager.getInstance(CacheManager.java:907)
这是我的代码,我正在尝试初始化
private static Cache getCache(String cacheName) throws IllegalStateException{
CacheManager cacheManager = CacheManager.getInstance();
Cache cache;
if(!cacheManager.cacheExists(cacheName)) {
cacheManager.addCache(cacheName);
}
cache = cacheManager.getCache(cacheName);
return cache;
}
看起来EHCache在Android中不起作用?任何人都能对此有所了解吗? 我收到错误后,我还在res / xml /中放入了一些带有一些配置的ehcache.xml ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<!-- By default, Ehcache stored the cached files in temp folder. --> <!-- <diskStore path="java.io.tmpdir" /> -->
<!-- Ask Ehcache to store cache in this path --> <!--<diskStore path="c:\\cache" /> -->
<!-- Sample cache named cache1
This cache contains a maximum in memory of 10000 elements, and will expire
an element if it is idle for more than 5 minutes and lives for more than
10 minutes.
If there are more than 10000 elements it will overflow to the
disk cache, which in this configuration will go to wherever java.io.tmp is
defined on your system. On a standard Linux system this will be /tmp"
-->
<cache name="cache1" maxEntriesLocalHeap="10000" maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
</ehcache>
答案 0 :(得分:0)
Ehcache无法找到ehcach.xml文件。它不知道res / xml文件夹。
因此尝试以这种方式以编程方式配置缓存(ehcache 2.10):
// create default CacheManager
Configuration config = new Configuration();
config.setName("Mngmt");
// [...]
CacheManager cacheManager = CacheManager.create(config);
int maxEntriesLocalHeap = 100;
String cachName = "cacheName";
Cache cache = new Cache(
new CacheConfiguration(cachName, maxEntriesLocalHeap)
.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)
.eternal(false)
.timeToLiveSeconds(120)
.timeToIdleSeconds(60)
.diskExpiryThreadIntervalSeconds(0));
cacheManager.addCache(cache);
您可以在此处找到更多信息:Creating Caches Programmatically