2016-08-15 6 views
0

Retrofitユーザー、 Retrofitでキャッシュに問題があります。 は、私は次の応答を送信するサーバーを持っているRetrofitでのキャッシングAndroid

サーバー:Apacheの X-Poweredのバイ:PHP/5.5.38 のApp-バージョン:{ "ID":3、 "CURRENT_VERSION": "0.2"、 "必須": "true"、 "build_date": "17-6-2016"} キャッシュ制御:public、max-age = 300、キャッシュのみ、max-stale = 86400 アップグレード:h2 接続: 転送エンコーディングをアップグレード:応答が正しくキャッシュされますが、レトロフィットとそれがないことはありませんボレーでアプリケーション/ JSON

: のContent-Typeをチャンク。私はこの

> Cache cache = new Cache(cacheDir, cacheSize); 
>   httpClient=new OkHttpClient(); 
>   httpClient.setCache(cache); 
>   httpClient.networkInterceptors().clear(); 
>   httpClient.networkInterceptors().add(new NetworkInterceptor()); 
>   restService=new Retrofit.Builder() 
>     .baseUrl(HOST_URL) 
>     .addConverterFactory(GsonConverterFactory.create()) 
>     .client(httpClient) 
>     .build() 
>     .create(RestService.class); 

ような改造クライアントと

パブリッククラスNetworkInterceptorがインターセプタを実装するネットワークインターセプタ{ パブリック静的最終列DEBUG_TAG = NetworkInterceptor.class.getSimpleName()設定しています。

@Override 
public Response intercept(Chain chain) throws IOException { 
    Request request=chain.request(); 
    User user=UserHandler.getUser(); 
    if (user!=null&&user.getToken()!=null){ 
     Log.d(DEBUG_TAG,"Authorization: "+user.getToken()); 
     request=request.newBuilder().addHeader("Authorization",user.getToken()) 
       .method(request.method(),request.body()) 
       .build(); 
    } 
    Response response = chain.proceed(request); 
    Log.d(DEBUG_TAG, "Cache-Control: " + response.cacheControl()); 
    return response; 
} 

}

キャッシュフォルダが作成されますが、唯一のフォルダは、「ジャーナル」フォルダが存在しています。変更するか、サーバーまたはAndroidクライアントに追加する必要がありますか?私は助けを感謝します

答えて

0

あなたのヘッダーにCache-Controlを追加するのを忘れました。

NetworkInterceptor implements Interceptor { 

    public static final String DEBUG_TAG = NetworkInterceptor.class.getSimpleName(); 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request=chain.request(); 
     User user=UserHandler.getUser(); 
     if (user!=null&&user.getToken()!=null){ 
      Log.d(DEBUG_TAG,"Authorization: "+user.getToken()); 
      request=request.newBuilder().addHeader("Authorization",user.getToken()) 
             // Only if the response is stored 
             .addHeader("Cache-Control", "only-if-cached") 
             // Return cached responses not older than 2419200 seconds (28 days)          
             //.addHeader("Cache-Control", "max-stale=2419200") 
             .method(request.method(),request.body()) 
             .build(); 
     } 
     Response response = chain.proceed(request); 
     Log.d(DEBUG_TAG, "Cache-Control: " + response.cacheControl()); 
     return response; 
    } 
} 
関連する問題