Question

J'utilise l'exemple trouvé ici: https://github.com/octo-online/robospice/wiki/starter-Guide

et ont tenté de l'étendre pour prendre en charge les demandes de bitmap avec la mise en cache. Avec LOGCAT défini sur Verbose, je vois des messages de journalisation indiquant que les bitmaps sont mis dans le cache avec succès, mais les tentatives de lecture du cache de cache lors de l'échec du message de journal suivant:

11-15 09: 14: 02.694: D // requier.java: 102 (5462): com.octo.android.robospice.persistence.exception.CacheloadingException: org.codehaus.jackson.map.jsonMappingException : Pas de constructeur approprié trouvé pour type [type simple, classe android.graphics.bitmap]: Impossible d'instancier à partir de l'objet JSON (doit ajouter / activer les informations de type?)

Voici le code pertinent de la JSONSPEFFACTORY:

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

Et voici le code qui invoque l'appel Spicemanager pour charger l'image du cache ou du réseau:

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

Ai-je besoin d'une usine pour reconstituer le bitmap à partir des données de cache? Comme ce n'est pas un objet JSON, que dois-je faire pour corriger la tentative d'utiliser la cartographie Jackson JSON? Will Jackson fera la bonne chose si je ajoutez / activer les informations de type? Comment puis-je faire ça?

Merci de lire ce loin!

-eric

Était-ce utile?

La solution

J'ai trouvé la réponse à la lecture à travers le Cachemanager (link ci-dessous) et trébuché sur la ligne "Tous les éléments [persisters] ... sont interrogés dans l'ordre" Alors j'ai ré-ordonné les entrées de la méthode CreateCacheManager et que cela fonctionne maintenant.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top