我正在使用 okhttp3 向服務器發出請求,而不是使用改造。我的想法是撥打電話并將響應保存在緩存中 15 分鐘。如果在這 15 分鐘內再次發出請求,則恢復緩存響應,15 分鐘后,再次從服務器請求它。這是我的代碼:public class Handler_JSON_get { public Handler_JSON_get() { } public String makeServiceCall(String url, JSONObject data) { final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); Cache cache = new Cache(new File(Environment.getExternalStorageDirectory().getPath() + "/Android/data/MY_PACKAGE/", "cache"), 10 * 1024 * 1024); OkHttpClient okHttpClient; Log.i("2134","Usando caché"); okHttpClient = new OkHttpClient.Builder() .addNetworkInterceptor(provideCacheInterceptor()) .readTimeout(45, TimeUnit.SECONDS) .protocols(Arrays.asList(Protocol.HTTP_1_1)) .addInterceptor(provideCacheInterceptor()) .cache(cache) .build(); Request request = new Request.Builder() .url(url) .get() .build(); try { Response response = okHttpClient.newCall(request).execute(); Log.i(TAG,"Response:"+response.code()); return response.body().string(); } catch (Exception e) { e.printStackTrace(); return null; } } Interceptor provideCacheInterceptor() { return new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Response response = chain.proceed(chain.request()); CacheControl cacheControl = new CacheControl.Builder() .maxAge(15, TimeUnit.MINUTES) .build(); return response.newBuilder() .header("cache", cacheControl.toString()) .build(); } }; }}問題是他總是打電話給服務器,我有很多疑問。okhttp3 負責查看存儲中是否有緩存的響應?該調用保存了一個日志文件,這是正確的文件嗎?我錯過了什么或者我做錯了什么?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
我花了一些時間才發現:正確的標頭名稱是Cache-Control
,而不是cache
:
return?response.newBuilder() ????????????????????.header("Cache-Control",?cacheControl.toString()) ????????????????????.build();
另外似乎添加攔截器 withaddNetworkInterceptor
就足夠了,沒有必要也添加它 withaddInterceptor
添加回答
舉報
0/150
提交
取消