2017-03-18 15 views
1

何らかの理由で、要求をキャッシュする必要がある場合でも、OkHttp response.cacheResponse()は常にnullを返します。次のコードでは、私はhttp://httpbin.org/cache/60という2つのリクエストを作成していますが、その2番目のリクエストはキャッシュから取得されると思います。しかし、出力からわかるように、そうではありません。OkHttpは要求をキャッシュしません

私には何が欠けていますか?

コード:

@Test 
public void test2_okhttp() throws IOException { 
    int cacheSize = 100 * 1024 * 1024; // 100 MiB 
    File cacheDir = new File("/tmp/ok_cache"); 
    cacheDir.mkdirs(); 

    Cache cache = new Cache(cacheDir, cacheSize); 

    OkHttpClient client = new OkHttpClient.Builder() 
      .cache(cache) 
      .build(); 

    String url = "http://httpbin.org/cache/60"; 

    for(int i = 0; i < 2; i++) { 
     Request request = new Request.Builder() 
       .url(url) 
       .build(); 

     Response response = client.newCall(request).execute(); 

     System.out.println("response1.cacheResponse() = " + response.cacheResponse()); 
     System.out.println("response1.networkResponse() = " + response.networkResponse()); 
    } 
} 

出力:

response1.cacheResponse() = null 
response1.networkResponse() = Response{protocol=http/1.1, code=200, message=OK, url=http://httpbin.org/cache/60} 
response1.cacheResponse() = null 
response1.networkResponse() = Response{protocol=http/1.1, code=200, message=OK, url=http://httpbin.org/cache/60} 

答えて

1

OkHttpは身体を読んで、あなたの副作用としてキャッシュにレスポンスボディを書き込みます。 response.body().string()を呼び出すか、別の方法で本文を読むことができます。

関連する問題