Pregunta

Estoy usando el ejemplo encontrado aquí: https://github.com/octo-online/robospice/wiki/starter-guide

y he intentado extenderlo para apoyar las solicitudes de mapa de bits con el almacenamiento en caché. Con Logcat establecido en verbose, veo los mensajes de registro que indican que los mapas de bits se están colocando en caché con éxito, pero los intentos de leer los mapas de bits de la memoria caché en las llamadas subsiguientes no están fallando con el siguiente mensaje de registro:

11-15 09: 14: 02.694: D // SolicitRunner.Java: 102 (5462): com.octo.android.robospice.persistence.Exception.cacheloadingException: org.codehaus.jackson.map.jsonmappingException : No se ha encontrado un constructor adecuado para el tipo [tipo simple, clase android.graphics.bitmap]: no se puede crear una instancia del objeto JSON (¿necesita agregar / habilitar la información del tipo?)

Aquí está el código relevante de 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;
}

y aquí está el código que invoca la llamada Spicemanager para cargar la imagen desde caché o red:

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);
    }
}

¿Necesito una fábrica para reconstituir el mapa de bits de los datos de caché? Dado que este no es un objeto JSON, ¿qué debo hacer para corregir el intento de usar el mapeo Jackson JSON? ¿Jackson hará lo correcto si agregue / habilita la información de tipo? ¿Cómo hago eso?

¡Gracias por leer esto lejos!

-ERIC

¿Fue útil?

Solución

Encontré la respuesta de la respuesta a través del Cachemanager (enlace a continuación) y tropezó con la línea "Todos los elementos [Persisters] ... son cuestionados en orden", por lo que volví a ordenar las entradas en el método CreateCachemanager y ahora está funcionando.

http://grepcode.com/file/repo1.maven.org/maven2/com.octo.android.robospice/robospice-cache/1.3.1/com/octo/Android / Robospice / Persistence / Cachemanager.Java

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top