No se puede realizar el almacenamiento en caché HTTP en android

He estado intentando utilizar OkHttp y Retrofit para almacenar en caché las peticiones http. Pero no parezco entender por qué no está funcionando.

@Headers("Cache-Control: public, max-age=640000, s-maxage=640000 , max-stale=10000000") @FormUrlEncoded @POST("/news/getNewslist/") void newsListByGenre(@Field("news_genre") String genre, Callback<ArrayList<NewsStory>> callback); 

Esta es una de las peticiones, que tiene todos los encabezados necesarios. Por otra parte, en un intento de probar que algo se escribe en caché de archivos asigné manualmente un caché a OkHttpClient.

 OkHttpClient name = new OkHttpClient(); try { if (!cache.exists()) cache.createNewFile(); name.setResponseCache(new HttpResponseCache(cache, 10 * 1024 * 1024)); } catch (IOException e) { e.printStackTrace(); } 

La caché de archivos que he creado tiene sólo 36 bytes, así que estoy seguro de que no hay nada en caché.

También he intentado cerciorarse de que el servidor tenga cabeceras requeridas, aunque quiero que trabaje sin interferencia del servidor pero fijé las cabeceras del control del escondrijo en la petición también. Este es el registro de depuración de retrofit.

 null: HTTP/1.1 200 OK Cache-Control: public, max-age=360000 Connection: Keep-Alive Content-Length: 5167 Content-Type: application/json Date: Fri, 28 Jun 2013 01:00:22 GMT Keep-Alive: timeout=5, max=99 Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 X-Android-Received-Millis: 1372381311315 X-Android-Response-Source: NETWORK 200 X-Android-Selected-Transport: http/1.1 X-Android-Sent-Millis: 1372381311048 X-Powered-By: PHP/5.4.7 

He leído el mecanismo de caché de http una y otra vez, pero parece que estoy perdiendo algo.

Realmente no se puede almacenar en caché respuestas POST . En su lugar, utilice el método GET . He aquí un ejemplo de trabajo de un Retrofit y OkHttp con almacenamiento en caché:

https://gist.github.com/swankjesse/5889518

@ Jesse Wilson – Creo que tiene sentido para caché la respuesta a veces – Estoy trabajando en una aplicación que hace que la llamada de red, pero si el usuario cambia las actividades y vuelve me gustaría utilizar los mismos datos que previamente devuelto por la respuesta POST. Sé que puedo usar ORM y persistir mu objetos etc, sólo parece que sería mucho más fácil decir retrofit para utilizar la misma respuesta.

  • Los ejemplos de ORMLite para Android no compilarán
  • Biblioteca de justificación de texto en Java
  • Cómo medir con precisión el tamaño en píxeles del texto que se está dibujando en un lienzo por drawTextOnPath ()
  • Imprimir el contenido de un paquete a Logcat?
  • Umbral adaptable rápido para Canny Edge Detector en Android
  • Fragmento de acceso del adaptador
  • Android - Contenido Valores sobre la escritura de filas existentes
  • Cámara Android setJpegQuality ignorado
  • Cómo escapar% en String.Format?
  • ¿Por qué Locale.getDefault (). GetLanguage () en Android devuelve el nombre para mostrar en lugar del código de idioma?
  • Error en la construcción de la suite de pruebas - (android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests). ¿Cómo resolver?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.