Retrofit添加緩存

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)//網絡攔截器

.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());

}

}

-----------------------------------------------------------------

重寫網絡響應的Cache-Control

如果服務器在網絡響應頭里配置了Cache-Contorol,那么其實客戶端是不需要做任何事情就能使用緩存的,但如果服務器沒有配置,我們可以攔截這個網絡響應,加入我們自己的配置。

/**

* 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());

//設置5分鐘后緩存過期

CacheControl.Builder builder = new CacheControl.Builder().maxAge(5, TimeUnit.MINUTES);

return originalResponse.newBuilder()

.header(CACHE_CONTROL, builder.build().toString())

.build();

}

};

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容