|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Actualizar xml sólo si es necesario
Buenas,
mi aplicación usa un archivo xml descargado de un servidor. Me gustaría que cada vez que un usuario ejecuta la aplicación se compruebe si el archivo xml que está en el servidor es más actual que el que tiene el usuario en el dispositivo, para en ese caso descargarlo. ¿Cómo puedo comprobar que el archivo xml que está en el servidor es más actual sin descargarlo? He intentado obtener la longitud del xml del servidor para compararla con el archivo local, pero al hacer // xml online size int fileOnlineSize = urlConnection.getContentLength(); me devuelve -1. Es decir que no se puede obtener el tamaño del archivo. La cabecera del archivo es esta (resumiendo el archivo xml, ya que el real ocupa 800 kb): <?xml version="1.0" encoding="utf-8"?> <elements xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <item><title>Title1</title></item> <item><title>Title2</title></item> </elements> Muchas gracias por vuestras respuestas. |
|
#2
|
||||
|
||||
Eso se hace con una cabecera de HTTP que se llama If-Modified-Since, que permite decirle al servidor que quieres cierto recurso (tu xml) pero solo si ha sido modificado desde el momento que digas (normalmente el tiempo que te dio el servidor la última vez que bajaste el xml). En ese caso, el servidor te devolverá o el clásico 200 OK con el fichero o una respuesta sin contenido del tipo 304 NOT MODIFIED.
En Android (HttpURLConnection) tienes los métodos getLastModified para cuando te hayas bajado un xml guardar ese valor. Luego tienes el setIfModifiedSince que pasándole ese valor hará que el servidor devuelva un código HTTP_OK si el fichero es nuevo (y lo procesas como siempre) o devuelva un código HTTP_NOT_MODIFIED (y entonces no haces nada).
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Los siguientes 2 usuarios han agradecido a mocelet su comentario: | ||
#3
|
||||
|
||||
OK! me puede valer, muchas gracias
|
#4
|
||||
|
||||
Me gustaria retomar el tema..
En mi caso se trata de un archivo ini el cual quiero saber si fue modificado , algún ejemplo practico de como hacer la tarea de comprobación? |
#5
|
||||
|
||||
Lo que no comprueba es el contenido, si se ha vuelto a guardar el fichero con los mismos datos, para el servidor es una modificación del fichero igualmente. Otra opción es guardar en algún sitio el hash md5 del fichero y cada vez que el ini cambie actualizarlo. Así solo bajandote el hash en vez del fichero entero ya sabes si hubo cambios en el contenido.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Gracias de parte de: | ||
#6
|
||||
|
||||
Bueno ya lo tengo , entre setmodifiedsince y getlastmodified hago la tarea de verificación , luego ini4j lib para parsear el ini y listo , gracias.
|
![]() |
![]() |
||||||
|