2016-05-26 10 views
0

私は取得リクエストのキャッシュをしようとしています。改造2のためにこれはOKHttpを使わなくてもいいようです。どうすればキャッシュできますか?私はこのようにしようとしています:Retrofit 2.0.2:GET要求をキャッシュする方法は?

private static Retrofit.Builder builder = new Retrofit.Builder() 
      .baseUrl(BASE_URL /*+ API*/) 
      .cache(new Cache(App.sApp.getCacheDir(), 10 * 1024 * 1024)) // 10 MB 
      .addInterceptor(new Interceptor() { 
       @Override public Response intercept(Chain chain) throws IOException { 
        Request request = chain.request(); 
        if (ApiUtils.isNetworkAvailable()) { 
         request = request.newBuilder().header("Cache-Control", "public, max-age=" + 60).build(); 
        } else { 
         request = request.newBuilder().header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 7).build(); 
        } 
        return chain.proceed(request); 
       } 
      }) 
      .addConverterFactory(GsonConverterFactory.create(getGson())); 

しかし、それは起こっていません。

答えて

1

私は多分それはあなたを助けますGDGAhmedab​​adレポ

Retrofit2デモからOkClientFactoryを見つけました。

public class OkClientFactory { 
    // Cache size for the OkHttpClient 

    private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024; // 50MB 

    private OkClientFactory() { 
    } 

    @NonNull 
    public static OkHttpClient provideOkHttpClient(Application app) { 
     // Install an HTTP cache in the application cache directory. 
     File cacheDir = new File(app.getCacheDir(), "http"); 
     Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE); 

     OkHttpClient.Builder builder = new OkHttpClient.Builder() 
       .cache(cache); 
     if (BuildConfig.DEBUG) { 
      HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); 
      loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      builder.interceptors().add(loggingInterceptor); 
     } 
     return builder.build(); 
    } } 

は今、あなたは次のように使用することができます:

.client(App.getInstance().getOkHttpClient()) 

より

ためhereありがとう参照してください。

0

GET要求のみをキャッシュするように指定する必要があります。

public class CachingControlInterceptor implements Interceptor { 
@Override 
public Response intercept(Chain chain) throws IOException { 
    Request request = chain.request(); 

    // Add Cache Control only for GET methods 
    if (request.method().equals("GET")) { 
     if (ConnectivityUtil.checkConnectivity(getContext())) { 
      // 1 day 
      request = request.newBuilder() 
       .header("Cache-Control", "only-if-cached") 
       .build(); 
     } else { 
      // 4 weeks stale 
      request = request.newBuilder() 
       .header("Cache-Control", "public, max-stale=2419200") 
       .build(); 
     } 
    } 

    Response originalResponse = chain.proceed(request); 
    return originalResponse.newBuilder() 
     .header("Cache-Control", "max-age=600") 
     .build(); 
} 
} 
関連する問題