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

Respuesta
 
Herramientas
  #1  
Viejo 23/09/14, 16:28:38
Array

[xs_avatar]
androidtf androidtf no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2014
Mensajes: 2
Tu operador: Movistar

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.
Responder Con Cita


  #2  
Viejo 23/09/14, 17:01:58
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
Los siguientes 2 usuarios han agradecido a mocelet su comentario:
  #3  
Viejo 23/09/14, 22:03:59
Array

[xs_avatar]
androidtf androidtf no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2014
Mensajes: 2
Tu operador: Movistar

OK! me puede valer, muchas gracias
Responder Con Cita
  #4  
Viejo 05/10/14, 10:24:53
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
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?
Responder Con Cita
  #5  
Viejo 05/10/14, 10:30:47
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

 Cita: Originalmente Escrito por rafaxplayer Ver Mensaje
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?
Igual que para el XML, el servidor solo mira si el fichero fue modificado desde la última vez.

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!
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 06/10/14, 08:20:34
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Bueno ya lo tengo , entre setmodifiedsince y getlastmodified hago la tarea de verificación , luego ini4j lib para parsear el ini y listo , gracias.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 15:26:36 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /