public void init(Context context) {
//指定緩存路徑
String directoryPath = context.getCacheDir().getAbsolutePath() + "/responses";
File directory = new File(directoryPath);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(new Cache(directory, DEFAULT_CACHE_SIZE))//指定緩存目錄和大小
.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)//網(wǎng)絡(luò)攔截器
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.HOST)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
mApi = retrofit.create(Api.class);
}
----------------------------------------------------------------------------------------------------------------
初始化
public class GooglePlayApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
NetworkManager.init(getApplicationContext());
}
}
-----------------------------------------------------------------
重寫網(wǎng)絡(luò)響應(yīng)的Cache-Control
如果服務(wù)器在網(wǎng)絡(luò)響應(yīng)頭里配置了Cache-Contorol扰路,那么其實(shí)客戶端是不需要做任何事情就能使用緩存的来农,但如果服務(wù)器沒有配置着撩,我們可以攔截這個(gè)網(wǎng)絡(luò)響應(yīng),加入我們自己的配置。
/**
* Dangerous interceptor that rewrites the server's cache-control header.
*/
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());
//設(shè)置5分鐘后緩存過期
CacheControl.Builder builder = new CacheControl.Builder().maxAge(5, TimeUnit.MINUTES);
return originalResponse.newBuilder()
.header(CACHE_CONTROL, builder.build().toString())
.build();
}
};