2013-08-12 1 views
5

J'utilise la bibliothèque Volley de Google comme modèle pour obtenir des données réseau;Volley: Comment configurer un Cache.Entry

J'ai mis en place un RequestQueue

requestQueue = new RequestQueue(new DiskBasedCache(new File(context.getCacheDir(), 
      DEFAULT_CACHE_DIR)), new BasicNetwork(new 
       HttpClientStack(AndroidHttpClient.newInstance(userAgent)))); 

J'ai aussi demande sous-classé, et contiennent des données à revenir du réseau très bien. Mon problème est avec la mise en cache: dans parseNetworkResponse() qui est redéfinie dans ma sous-classe de la demande, quand je l'appelle

return Response.success(list, HttpHeaderParser.parseCacheHeaders(response)); 

HttpHeaderParser.parseCacheHeaders (réponse) renvoie NULL car le serveur est configuré pour « mise en cache pas » dans sa En-tête de réponse ... Peu importe que je voudrais encore mettre en cache ces données pour un nombre variable d'heures (24 heures probablement), Comment puis-je faire cela en créant une volée Cache.Entry ... Je crois comprendre que l'URL est utilisé comme valeur de clé de cache (et je voudrais que ce soit l'URL). Pour résumer, depuis HttpHeaderParser.parseCacheHeaders (réponse) renvoie null, je voudrais créer un nouveau Cache.Entry qui est mis en place pour expirer après 24 heures, et la clé de cache étant l'URL de la demande.

Des pensées?

Merci!

Répondre

3

J'ai eu le même problème et a fini avec cette solution:

@Override 
protected Response<String> parseNetworkResponse(NetworkResponse response) { 

    // Create a FakeCache that invalidate the data after 24 hour 
    Cache.Entry mFakeCache = HttpHeaderParser.parseCacheHeaders(response); 
    mFakeCache.etag = null; 
    mFakeCache.softTtl = System.currentTimeMillis() + 86400 * 1000; 
    mFakeCache.ttl = mFakeCache.softTtl; 

    return Response.success(response.data, mFakeCache); 
} 
+0

J'ai fini par le faire, je vous remercie :) – chocospaz