Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确使用com.octo.android.robospice缓存位图_Android_Caching_Bitmap_Robospice - Fatal编程技术网

如何正确使用com.octo.android.robospice缓存位图

如何正确使用com.octo.android.robospice缓存位图,android,caching,bitmap,robospice,Android,Caching,Bitmap,Robospice,我使用的例子如下: 并尝试对其进行扩展,以支持带有缓存的位图请求。将LogCat设置为verbose时,我会看到日志消息,指示位图已成功放入缓存,但在后续调用时尝试从缓存中读回位图失败,并显示以下日志消息: 11-15 09:14:02.694:D//RequestRunner.java:102(5462):com.octo.android.robospice.persistence.exception.CacheLoadingException:org.codehaus.jackson.ma

我使用的例子如下:

并尝试对其进行扩展,以支持带有缓存的位图请求。将LogCat设置为verbose时,我会看到日志消息,指示位图已成功放入缓存,但在后续调用时尝试从缓存中读回位图失败,并显示以下日志消息:

11-15 09:14:02.694:D//RequestRunner.java:102(5462):com.octo.android.robospice.persistence.exception.CacheLoadingException:org.codehaus.jackson.map.JsonMappingException:找不到适合类型[simple type,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);
    }
}
public void getNetworkBitmap(字符串url、字符串缓存键、GetBitmapListener侦听器){
GetMerchantLogoRequest请求=新的GetMerchantLogoRequest(url);
spiceManager.execute(请求、缓存键、持续时间分钟、新网络位图请求侦听器(侦听器));
}
私有类NetworkBitmapRequestListener实现RequestListener{
私有GetBitmapListener侦听器;
公共网络BitMapRequestListener(GetBitmapListener listener){
this.listener=listener;
}
@凌驾
公共void onRequestFailure(SpiceException){
onImageRequestFailure(spiceException);
}
@凌驾
public void onRequestSuccess(位图徽标){
onImageRequestSuccess(logo);
}
}
我是否需要工厂从缓存数据重建位图?既然这不是一个Json对象,我需要做什么来纠正使用Jackson Json映射的尝试?如果我添加/启用类型信息,Jackson会做正确的事情吗?我该怎么做

谢谢你读到这里


-Eric

您可以使用BitmapRequest,下面是一个示例:


我通过CacheManager(下面的链接)找到了答案,并在“所有元素[持久化器]…按顺序被质疑”这一行上绊倒了,因此我在CreateCacheManager方法中对条目重新排序,现在它开始工作了

谢谢,但上面的“未找到合适的构造函数…”错误仍显示在LogCat中。