En caché JSON de webservice en android – patrón?
Quiero almacenar en caché los datos de un json-webservice en mi aplicación android. La primera vez, la aplicación se inicia, debe esperar hasta que todos los datos se cargaron de servicio. Después de esa carga inicial, la aplicación debe comprobar de vez en cuando (algunos días) si hay nuevos datos disponibles. En caso afirmativo, los datos almacenados localmente deben actualizarse y cargarse la próxima vez que se inicie la aplicación.
Actualmente estoy tratando de resolver esto por un IntentService y por el ahorro de los datos cargados en un archivo – pero no es un muy limpio una manera hermosa!
- Introduce datos en la base de datos desde la aplicación de Android a través del servicio web.
- Error: NullPointerAccess: La variable "" sólo puede ser null en esta ubicación
- Bloquear usuarios no Android que llaman al servicio JSON
- Cómo obtener actualizaciones en vivo a través de JSON a listview
- ¿Es posible ejecutar un servidor Tomcat y algunas aplicaciones web en un dispositivo Android? (es decir, un comprimido)
¿Alguien sabe una manera limpia de hacer esto? ¿Un patrón de caché?
- Comprobación de la disponibilidad del servicio web en android
- Compartir clases java entre el servicio web y el cliente
- Java REST cliente API para Android
- Cómo implementar aplicación de chat para Android?
- Diferentes formas de publicar valores json en Server
- Ksoap2 Android - ¿cómo especificar un espacio de nombres para las propiedades secundarias de un objeto complejo?
- Cliente Android para servicio web REST con seguridad básica
- ¿Qué authTokenType significa exactamente?
Aquí hay una manera sencilla de hacer esto que no implica un servicio, hilos, alarmas, etc sólo definir un envoltorio alrededor de su JSON, como,
class MyJson { JSONObject getJson() { ... }; }
La implementación de getJson()
hace lo siguiente,
if (cached json file exists) { if (json file last modified + 1 day > current time) { json = get from network; cache json in file; } else [ json = get from file; } } else { json = get from network; cache json in file; }
En otras palabras, lazy-fetch el json fresco de la red cuando lo necesite. Esto es mucho más sencillo que actualizar periódicamente un archivo de caché estableciendo alarmas y ejecutando un servicio para actualizar el caché …
Desde tu aplicación, haces lo mismo, ya sea la primera carga o la Nª carga de los datos. Usted llama getJson()
,
new Thread(new Runnable() { public void run() { json = getJson(); // do whatever you need to do after the json is loaded } }).start();
El único inconveniente es que de vez en cuando, la llamada para obtener el JSON tomará más tiempo y, en consecuencia, debe ejecutarlo en un hilo para no ANR la interfaz de usuario … pero debe hacerlo de todos modos, ya sea en un archivo o Extraído de la red, debe evitar hacer IO en el subproceso de interfaz de usuario.
- Iconos aplastados en la barra de herramientas después de cambiar a Android SDK 26
- Cómo crear un archivo raw de gestos android