2015-12-14 101 views
0

要緩存中的Android okhttp後,我有以下代碼設置:OKHTTP - 設置高速緩存如何緩存某些改裝HTTP響應

final @Nullable File baseDir = context.getCacheDir(); 
if (baseDir != null) { 
    final File cacheDir = new File(baseDir, "HttpResponseCache"); 
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE)); 
} 

這將設置我的緩存到一個目錄下我叫HttpResponseCache。我現在如何緩存某個響應?我不想緩存所有改裝回復只有選定的?

回答

1

只是爲了讓您知道這個答案是使用Retrofit 2測試版。爲了這個答案的目的沒有太大的區別。

我假設你有這樣的東西來獲得改造客戶端。

private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(new ErrorHandlingCallbackAdapter.ErrorHandlingCallAdapterFactory()); 

我希望你也有這樣的方法:

public static <S> S createCachedService(Context context, Class<S> serviceClass) { 

    Retrofit retrofit = builder.client(sOkHttpClient).build(); 
    return retrofit.create(serviceClass); 
} 

但你應該有這些方法2。一個增加了okhttp客戶端,另一個沒有。

public static <S> S createService(Context context, Class<S> serviceClass) { 

    Retrofit retrofit = builder.build(); 
    return retrofit.create(serviceClass); 
} 

無論何時只需要使用緩存服務創建者進行緩存調用。

我的理解是,如果您希望對該端點的所有請求都跳過緩存,則還可以向端點添加@Header註釋。 okhttp應該尊重你的Cache-Control頭。 類似於

public interface GitHubService { 

    @Headers("Cache-Control: no-cache") 
    @GET("https://stackoverflow.com/users/{user}/repos") 
    Call<List<Repo>> listRepos(@Path("user") String user); 

} 

快樂編碼。