Как правильно использовать com.octo.android.robospice для кэширования растровых изображений

StackOverflow https://stackoverflow.com//questions/20007452

Вопрос

Я использую пример, найденный здесь: https://github.com/octo-online/robospice/wiki/Starter-Guide

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

11-15 09:14:02.694:D//RequestRunner.java:102(5462):com.octo.android.robospice.persistence.исключение.Исключение 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, что мне нужно сделать, чтобы исправить попытку использовать отображение Jackson Json?Правильно ли поступит Джексон, если я добавить / включить информацию о типе? Как мне это сделать?

Спасибо, что дочитали до этого места!

-Эрик

Это было полезно?

Решение

Я нашел ответ, прочитав CacheManager (ссылка ниже), и наткнулся на строку "Все элементы [сохраняемые]...ставятся под сомнение по порядку" итак, я переупорядочил записи в методе 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top