Domanda

Sto usando l'esempio trovato qui: https://github.com/octo-online/robospice/wiki/starter-guide

e hanno tentato di estenderlo per supportare le richieste bitmap con la memorizzazione nella cache. Con il logcat impostato su Verbose, vedo i messaggi di registro che indicano che le bitmap vengono messe in cache con successo, ma tenta di leggere le bitmap dalla cache sulle chiamate successive stanno fallendo con il seguente messaggio di registro:

11-15 09: 14: 02.694: D // RichiestaRunner.java: 102 (5462): com.octo.android.robospice.persistence.exception.CacheLoadingException: org.Codehaus.jackson.map.jsonMappingException : Nessun costruttore adatto trovato per il tipo [Tipo semplice, classe Android.graphics.BitMap]: impossibile istanziare da JSON Object (è necessario aggiungere / abilita informazioni digitali?)

Ecco il codice pertinente dalla 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;
}
.

Ed ecco il codice che richiama la chiamata SpiceManager per caricare l'immagine da cache o rete:

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

Ho bisogno di una fabbrica per ricostituire la bitmap dai dati della cache? Dal momento che questo non è un oggetto JSON, cosa devo fare per correggere il tentativo di utilizzare Jackson Json Mapping? Jackson fa la cosa giusta se I Aggiungi / Abilita informazioni digitali? Come faccio a farlo?

Grazie per aver letto così lontano!

-eric

È stato utile?

Soluzione

Ho trovato la risposta che legge attraverso il cachemanager (link sotto) e inciampato sulla linea "Tutti gli elementi [Persisters] sono interrogati in ordine" Quindi ho ridotto le voci nel metodo createcachemanager e ora sta funzionando.

http://grepcode.com/file/repo1.maven.org/maven2/com.octo.android.robospice/robospice-cache/1.3.1/com/octo/Android / robospice / persistenza / cachemanager.java

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top