2016-09-19 7 views
1

サーバーの応答をオフラインで保存します。OkHttpとRetrofit 2のキャッシュとオフラインの使用

これは私のコードです:

 public void loadJSON() { 
     OkHttpClient client = new OkHttpClient.Builder() 
       .connectTimeout(4, TimeUnit.SECONDS) 
       .readTimeout(4, TimeUnit.SECONDS) 
       .writeTimeout(4, TimeUnit.SECONDS) 
       .build(); 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Config.URL_MAIN + sid + "/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(client) 
       .build(); 

     RequestInterfacePlanGesamt request = retrofit.create(RequestInterfacePlanGesamt.class); 
     Call<JSONResponsePlanGesamt> call = request.getJSON(); 
     call.enqueue(new Callback<JSONResponsePlanGesamt>() { 
      @Override 
      public void onResponse(Call<JSONResponsePlanGesamt> call, Response<JSONResponsePlanGesamt> response) { 
//bla bla 
} 
    } 

    public interface RequestInterfacePlanGesamt { 
     @Headers({ 
       "User-Agent: android" 
     }) 
     @GET(Config.GESAMT) 
     Call<JSONResponsePlanGesamt> getJSON(); 
    } 

はどのようにして、コンテンツをオフラインで使用できますか?キャッシュについての記事は既に読んでいますが、私は実際にコンテンツをオフラインで使用する方法を知らないのです。

+0

をあなたは結果をキャッシュするために2つのライブラリを使用している理由は?ただ1つだけで簡単になるならば、それはただ1つの –

+0

@PreetikaKaurで完了します。問題はありません。しかし、どのようにキャッシュするのですか? – Francis

答えて

1

ちょうどあなたのOkHttpClient Builderでcache()メソッドを使用します。

private static final long CACHE_SIZE = 10 * 1024 * 1024; // 10 MB 

OkHttpClient client = new OkHttpClient.Builder() 
       .connectTimeout(4, TimeUnit.SECONDS) 
       .readTimeout(4, TimeUnit.SECONDS) 
       .writeTimeout(4, TimeUnit.SECONDS) 
       .cache(new Cache(getApplication().getCacheDir(), CACHE_SIZE)) 
       .build(); 
+0

ええと、私はこのコードを追加しました、私は私の活動を開始、私の断片はコンテンツを読み込み開始します。その後、フラグメントを切り替え、インターネットをオフにして最初のフラグメントに戻りますが、キャッシュされたコンテンツはありません。 – Francis

+1

サーバーがレスポンスとともに適切なキャッシュヘッダーを送信していることを確認する必要があります。 –

+0

@JesseWilson大丈夫、私はWindows Serverを持っています。 IISは何を送信する必要がありますか? – Francis

関連する問題