2016-04-12 6 views
1

Ich erstelle eine Android-App, die alle ihre Daten von einem Webservice abgerufen hat. Und ich benutze Okhttp als Netzwerk-Layer. Ich bin in der Lage, die Cache-Größe von okhttp zu setzen, aber ich möchte die veraltete Zeit festlegen, nach der okhttp Daten vom Server holt sonst aus dem lokalen Cache abgerufen.Wie stelle ich die Stale-Zeit für OkHttp Android ein?

Immer wenn ich zurück drücke und die App verlasse. Nach dem Relaunch geht es wieder um die Daten vom Server zu holen. Ist es möglich, die Daten aus dem lokalen Cache für veraltete Zeit wie 15 Minuten zu erhalten? Und nach 15 Minuten ist vorbei und Benutzer startet die App erneut, dann kommen Daten vom Server.

Antwort

2

Sie können versuchen, Cache-Control: max-age= 900 in der Antwort Ihrer Anfrage verwenden. Auf diese Weise sagen Sie OkHttp, diese Antwort für 15 Minuten (900 Sekunden) zwischenzuspeichern.

Sie können mehr darüber lesen here.

Wenn Sie es programmgesteuert auf dem Gerätende tun möchten, können Sie Antwort mit Interzeptoren umschreiben. Verwenden Sie es wie folgt aus:

private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() { 
@Override public Response intercept(Interceptor.Chain chain) throws IOException { 
    Response originalResponse = chain.proceed(chain.request()); 
    return originalResponse.newBuilder() 
     .header("Cache-Control", "max-age=900") 
     .build(); 
    } 
}; 

Fügen Sie diese auf Ihrem OkHttp Client, während es den Bau:

OkHttpClient client = new OkHttpClient.Builder() 
    .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
    .build(); 

Sie sind gut zu gehen!

+0

Wie programmatisch? Gibt es eine Methode in der com.squareup.okhttp.Response-Klasse, um es zu tun oder gibt es eine andere Möglichkeit? – Passiondroid

+0

@Passiondroid, überprüfe meine aktualisierte Antwort. –

+0

Danke für die Informationen, aber das Problem ist, dass ich OkHttp 2.7.0 benutze und ich bin nicht in der Lage, einen Weg zu finden, um Interzeptoren hinzuzufügen. – Passiondroid