如何正确使用com.octo.android.robospice来缓存位图
题
我正在使用这里找到的示例: https://github.com/octo-online/robospice/wiki/starter-guide
并尝试将其扩展以支持使用缓存的位图请求。使用logcat设置为详细,我会看到日志消息,指示位图已成功进入缓存,但尝试从后续呼叫上从缓存中读取位图返回的位图均使用以下日志消息失败:
11-15 09:14:02.694:D // RequestRunner.java:102(5462):com.octo.android.robospice.persistence.exception.cacheloadingException:org.codehaus.jackson.map.jsonmapptException :找不到类型[简单类型,class android.graphics.bitmap]找不到合适的构造函数:不能从JSON对象实例化(需要添加/启用类型信息?)
这是jsonspicefactory的相关代码:
@Override
public CacheManager createCacheManager(Application application) {
CacheManager cacheManager = new CacheManager();
try {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
JacksonObjectPersisterFactory jacksonObjectPersisterFactory = new JacksonObjectPersisterFactory(application);
cacheManager.addPersister( jacksonObjectPersisterFactory );
// Try to add support for bitmap caching here
InFileBitmapObjectPersister filePersister = new InFileBitmapObjectPersister(application);
LruCacheBitmapObjectPersister memoryPersister = new LruCacheBitmapObjectPersister(filePersister, cacheSize);
cacheManager.addPersister(memoryPersister);
} catch (CacheCreationException e) {
e.printStackTrace();
}
return cacheManager;
}
.
以及这里调用spicemanager调用以从缓存或网络加载图像的代码:
public void getNetworkBitmap(String url, String cacheKey, GetBitmapListener listener) {
GetMerchantLogoRequest request = new GetMerchantLogoRequest(url);
spiceManager.execute(request, cacheKey, DurationInMillis.ONE_HOUR, new NetworkBitmapRequestListener(listener));
}
private class NetworkBitmapRequestListener implements RequestListener<Bitmap> {
private GetBitmapListener listener;
public NetworkBitmapRequestListener(GetBitmapListener listener) {
this.listener = listener;
}
@Override
public void onRequestFailure(SpiceException spiceException) {
listener.onImageRequestFailure(spiceException);
}
@Override
public void onRequestSuccess(Bitmap logo) {
listener.onImageRequestSuccess(logo);
}
}
.
我需要一个工厂来从缓存数据重建位图吗?因为这不是JSON对象,我需要做什么来纠正使用杰克逊json映射的尝试?如果我添加/启用类型信息?我该怎么做呢?
,杰克逊会做正确的事情吗?谢谢你阅读这一点!
-eric
解决方案
我发现答案通过cacachemanager(下面的链接)读读数并偶然发现了所有元素[持久性] ......以顺序质疑“所以我重新订购了CreateCacheManager方法中的条目,现在它正在工作。
不隶属于 StackOverflow