Check and recover a cached file with okhttp3
我使用 okhttp3 向服务器发出请求,而不是使用改造。
我的想法是拨打电话并将响应保存在缓存中 15 分钟。
如果在这 15 分钟内再次发出请求,则恢复缓存响应,15 分钟后,再次从服务器请求。
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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 2 3 | return response.newBuilder() .header("Cache-Control", cacheControl.toString()) .build(); |
另外好像用
加