2014-02-05 10 views
9

Ich verwende retrofit und okhttp in einer unserer Anwendungen.Ist Retrofit + Okhttp mit httpCaching als Standard in Android?

Ich kann nicht wirklich eine gute Erklärung für das Standardverhalten von Retrofit finden.

Wenn Okhttp im Klassenpfad ist, wird es automatisch verwendet. Aber soweit ich es sehen kann, ist der Standard HttpResponseCache null.

Muss ich das Caching explizit mit Retrofit und Okhttp aktivieren?

Antwort

7

Sie sollten Ihren OkHttpClient manuell erstellen und konfigurieren, wie Sie möchten. In diesem Fall sollten Sie einen Cache installieren. Sobald Sie das haben, erstellen Sie ein OkClient und übergeben Sie es an Retrofit RestAdapter.Builder

Auch keine Zwischenspeicherung für HTTP-POST-Anfragen. GETs werden jedoch zwischengespeichert.

+1

ich den Code, den ich in separater Antwort verwendet hinzugefügt, weil ich denke, dass das auch für andere Menschen interessant wäre. Da ich es von deinem Beispiel kopiert habe, hoffe ich, dass der Code in Ordnung ist. – Janusz

+1

http://stackoverflow.com/questions/22445177/trying-to-make-use-of-httpcache-android sagt, dass es nicht mehr notwendig ist, den Cache zu konfigurieren. Ist das richtig? – Janusz

8

DEPRECATED für OkHttpClient v2.0.0 und höher

Als Jesse Wilson Sie Ihren eigenen Cache erstellen müssen hingewiesen.
Der folgende Code sollte einen 10 MB-Cache erstellen.

File httpCacheDirectory = new File(application.getApplicationContext() 
    .getCacheDir().getAbsolutePath(), "HttpCache"); 

HttpResponseCache httpResponseCache = null; 
try { 
    httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024); 
} catch (IOException e) { 
    Log.e(getClass().getSimpleName(), "Could not create http cache", e); 
} 

OkHttpClient okHttpClient = new OkHttpClient(); 
okHttpClient.setResponseCache(httpResponseCache); 
builder.setClient(new OkClient(okHttpClient)); 

Der Code basiert auf Jesse Wilsons example on Github.

+0

Wenn dies auf einen Post gesetzt ist, würde es ignoriert werden? weil ich es auf meinem allgemeinen Erbauer setze, der für jede Anfrage verwendet wird – Lion789

+0

http://stackoverflow.com/questions/22445177/trying-to-make-use-of-httpcache-android Ich erhalte tatsächlich diesen Fehler ... und wenn ich nicht httpResponseCache.install it Fehler, dass neue HttpResponseCache kann nicht außerhalb verwendet werden ... es ist nicht öffentlich .. – Lion789

+2

ist das nicht ein 10MB Cache? –

15

Korrekte Implementierung für OkHttpClient v2:

int cacheSize = 10 * 1024 * 1024; // 10 MiB 
File cacheDir = new File(context.getCacheDir(), "HttpCache"); 
Cache cache = new Cache(cacheDir, cacheSize); 
OkHttpClient client = new OkHttpClient.Builder() 
    .cache(cache) 
    .build(); 

siehe documentation

+3

setCache existiert nicht in 3 Sie können also 'new OkHttpClient.Builder() verwenden. cache (cache) .build();' – frostymarvelous

+0

Danke @frostymarvelous –