Использование HttpResponseCache

Я хочу использовать HttpResponseCache в своем приложении, я установил его успешно и он пишет кэшированный контент, но на самом деле я не знаю, как его использовать в HttpURLConnection. Андроидная документация не полностью охватывает этот аспект.

То, что я хочу сделать, - это кэшировать ответы в течение 12 часов, и за этот период он просто получает данные из кеша и даже не подключается, чтобы проверить, есть ли новая версия (мои данные изменяются через 24 часа). Когда это время пройдет, кеш должен быть обходить и установить соединение для новой версии данных. Я думаю, что поведение по умолчанию - это всегда проверка новой версии.

Я узнал, что первый setUseCaches(true) должен быть правдой. Но я не знаю, как установить "Cache-Control", чтобы он работал. Я искал все, но я не мог найти этот сценарий.

1 ответ

Просто начал работать с HttpResponse. Я использую это в AsyncTasks для загрузки изображения. Я не уверен, что моя реализация с HttpUrlConnection на 100% правильная, я добавил свои мысли в код. прокомментируйте или исправьте, если вы можете это улучшить!

public Bitmap getBitmapFromURL(String link) {

 try {
 //open connection 
 URL url = new URL(link);
 HttpURLConnection connection = (HttpURLConnection) url
 .openConnection();


 Bitmap myBitmap;
 try {
 //Add property, to check if HTTPRequest is saved in chache
 //if true: continue
 //if false: FileNotFoundException (see catch block) 
 connection.addRequestProperty("Cache-Control",
 "only-if-cached");

 InputStream cached = connection.getInputStream();
 myBitmap = BitmapFactory.decodeStream(cached);

 Log.i(TAG,"Image was saved in CHACHE!!!");

 } catch (FileNotFoundException e) {
 //because I tried to read the input stream in the try block, I have to establish again
 //!!! NOT SURE IF THIS IS CORRECT!?

 HttpURLConnection connection2 = (HttpURLConnection) url
 .openConnection();
 connection2.setDoInput(true);

 //set max stale in seconds (this should be saved in cache for one hour (60seconds * 60 minutes)!)
 connection2.addRequestProperty("Cache-Control", "max-stale=" + (60 * 60));
 connection2.connect();
 InputStream input = connection2.getInputStream();
 myBitmap = BitmapFactory.decodeStream(input);
 Log.i(TAG,"Image was NOT CACHED!!");
 }

 return myBitmap;

 } catch (IOException e) {
 e.printStackTrace();
 Log.e("getBmpFromUrl error: ", e.getMessage().toString());
 return null;
 }
 }

licensed under cc by-sa 3.0 with attribution.