2
A
回答
2
這將緩存2分鐘
OkHttpClient provideOkHttpClient() {
Cache cache = new Cache(new File(context.getCacheDir(), "http-cache"), 10 * 1024 * 1024);
return new OkHttpClient.Builder()
.addNetworkInterceptor(provideCacheInterceptor())
.cache(cache)
.build();
}
Interceptor provideCacheInterceptor() {
return new Interceptor() {
@Override
public Response intercept (Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
CacheControl cacheControl = new CacheControl.Builder()
.maxAge(2, TimeUnit.MINUTES)
.build();
return response.newBuilder()
.header("Cache-Control", cacheControl.toString())
.build();
}
};
}
2
所有響應這裏有一個樣本CacheResponse.java
Cache cache = new Cache(cacheDirectory, cacheSize);
client = new OkHttpClient.Builder()
.cache(cache)
.build();
的javadoc for Cache有強迫新鮮或緩存實例響應。
+0
尤里它正在工作,但我想做運行時內存緩存而不是磁盤內存,也想知道如何進一步刪除緩存。 我在這裏使用公共http客戶端。 –
+0
Cache的設計基於一個真正的文件系統AFAIK。公共API看起來不太可能。我懷疑你需要在FileSystem中使用Cache或者在攔截器中實現你自己的緩存策略 –
3
public final class FeedInterceptor{
private final static String TAG = FeedInterceptor.class.getSimpleName();
/**
* Validate cache, return stream. Return cache if no network.
* @param context
* @return
*/
public static Interceptor getOnlineInterceptor(final Context context){
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
String headers = response.header("Cache-Control");
if(NetworkUtils.isConnected(context) &&
(headers == null || headers.contains("no-store") || headers.contains("must-revalidate") || headers.contains("no-cache") || headers.contains("max-age=0"))){
LOGD(TAG, "Returning fresh response");
return response.newBuilder()
.header("Cache-Control", "public, max-age=600")
.build();
} else{
LOGD(TAG, "Returning old response");
return response;
}
}
};
return interceptor;
}
/**
* Get me cache.
* @param context
* @return
*/
public static Interceptor getOfflineInterceptor(final Context context){
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if(!NetworkUtils.isConnected(context)){
request = request.newBuilder()
.header("Cache-Control", "public, only-if-cached")
.build();
}
return chain.proceed(request);
}
};
return interceptor;
}
}
而客戶端:
private OkHttpClient createCacheClient(Context context){
File httpCacheDirecotory = new File(context.getCacheDir(), FILE);
Cache cache = new Cache(httpCacheDirecotory, CACHE_SIZE);
return new OkHttpClient.Builder()
.addNetworkInterceptor(FeedInterceptor.getOnlineInterceptor(context))
.addInterceptor(FeedInterceptor.getOfflineInterceptor(context))
.cache(cache)
.build();
}
+0
只是工作。應該被標記爲接受 –
相關問題
- 1. 如何緩存JSON響應?
- 2. 如何緩存expressjs響應
- 3. 緩存響應
- 4. 如何刷新socket.gethostbyname響應的緩存?
- 5. 如何緩存Jersey的響應?
- 6. 在express中緩存響應
- 7. 緩存JSON響應
- 8. GAE&響應緩存
- 9. 緩存HTTPS響應
- 10. 緩存XML響應
- 11. Retrofit響應緩存
- 12. WebSphere響應緩存
- 13. 緩存SOAP響應
- 14. 緩存API響應
- 15. 如何在golang中的web應用中緩存響應?
- 16. 如何防止python urllib3緩存響應
- 17. 如何防止Alfresco webscript響應緩存
- 18. 如何垃圾緩存HTTP 302響應
- 19. 如何緩存php soapclient響應?
- 20. 如何緩存異步模塊響應
- 21. 如何停止org.springframework.web.client.RestTemplate緩存響應?
- 22. 如何緩存REST響應,Spring For Android
- 23. Angular $ http緩存:如何識別緩存響應vs實際$ http.get
- 24. webapp2如何刪除緩存控制:從響應頭無緩存?
- 25. renderBinary響應的緩存
- 26. 如何在Android應用中緩存Http客戶端的響應?
- 27. 在SpringMVC應用中緩存HTTP響應
- 28. Play 2.2中的緩存塊響應
- 29. 在Alamofire中檢測緩存的響應
- 30. 防止緩存ajax響應
你想幹什麼? SharedPreferences不夠用?好。把它保存在數據庫中怎麼樣? –
我正在使用確定http的庫。我想使用緩存選項來緩存http響應。所以我想知道有什麼可用的選項來做到這一點。 –
你有沒有[檢查此](http://square.github.io/okhttp/3.x/okhttp/)? –