我正在使用 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; } }問題是他總是打電話給服務器,我有很多疑問。okhttp3 負責查看存儲中是否有緩存的響應?該調用保存了一個日志文件,這是正確的文件嗎?我錯過了什么或者我做錯了什么?我已經看到有很多關于它的問題,但我無法使這些答案與我的代碼兼容。我真誠地感謝我的代碼中正常運行所必需的部分,我開始發瘋了。
1 回答

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