2013-11-15 3 views
2

Я использую пример найти здесь: https://github.com/octo-online/robospice/wiki/Starter-GuideКак правильно использовать com.octo.android.robospice кэшировать растровые изображения

и попытались распространить его на запросы поддержки растровых с кэшированием. Когда LogCat настроен на подробное описание, я вижу сообщения журнала, указывающие, что растровые изображения успешно помещаются в кеш, но попытки чтения растровых изображений из кеша при последующих вызовах не работают со следующим сообщением журнала:

11-15 09 : 14: 02.694: D // RequestRunner.java: 102 (5462): com.octo.android.robospice.persistence.exception.CacheLoadingException: org.codehaus.jackson.map.JsonMappingException: не найдено подходящего конструктора для типа [простой тип , класс 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? Будет ли Джексон делать правильные вещи, если я добавить/включить информацию о типе? Как это сделать?

Спасибо за прочтение!

-Эрик

ответ

2

Я нашел ответ чтения через CacheManager (ссылка ниже) и наткнулись на линии «Все элементы [ persisters] ... подвергаются сомнению в порядке ", поэтому я повторно заказал записи в методе CreateCacheManager и теперь он работает.

http://grepcode.com/file/repo1.maven.org/maven2/com.octo.android.robospice/robospice-cache/1.3.1/com/octo/android/robospice/persistence/CacheManager.java

Смежные вопросы