Logo android

Hoy cambiamos un poquito de tercio, a ver si alguien avezado puede echarme un cable….(es solo una cuestión de tiempo dar con la solución buena)

Estoy desarrollando una pequeña aplicación para Android en la cual necesito un archivo de texto (.xml) especialmente preparado para que haga la labor de persistencia de la misma.

Me explico, actualmente tengo mucha curiosidad por ver como Google ha montado este fabuloso sistema. Para intentar comprender un poco dicha tecnología he decidido hacer una pequeña aplicación.
La aplicación maneja cierta información, que quiero persistir. He estado echando unas horas a leer la parte de persistencia de Android, pero dado que no quería complicarme mucho la vida, decidí que en vez de usar una BBDD la aplicación usaría un fichero xml. Dicho fichero tiene cierta estructura como es lógico. Es muy obvio que la estructura inicialmente planteada tiene que llegar de alguna forma a la aplicación, de forma que cuando la misma pase a ejecución, pueda tanto leer como escribir los datos propiamente dichos en la misma.

Bien, pues aquí comienza mi andanza por los mundos Android.

Inicialmente, después de leer las interminables páginas de google sobre el directorio de recursos, pensé que seria posible incluir dicho fichero a modo de plantilla en dicho directorio, concretamente había pensado en dos destinos, /res/xml o /res/raw. Desde el entorno de desarrollo tengo una referencia al recurso, y lo puedo leer sin inconveniente. Ahora viene el problema, según la documentación Android el directorio de resursos es de solo lectura, por lo tanto, esa primera ubicación no me vale para persistir información debido obviamente a que no voy a poder escribir en el fichero.

De forma forma paralela me pongo a leer diversos artículos sobre la escritura de ficheros en la memoria interna del dispositivo. Un par de pruebas y consigo una pequeña aplicación que escribe una linea en un fichero en la mem. interna:


try{
OutputStreamWriter fout=
new OutputStreamWriter(
openFileOutput("testguarro.xml", Context.MODE_PRIVATE));
fout.write("test");
fout.close();
}catch (Exception ex){
Log.e("InvisibleS", "Error al escribir fichero a memoria interna");
}

Con la herramienta DDMS verifico que el fichero que acabo de crear se puede ver en la ruta /data/data/<paqueteapp>/files/<ficherosalida.xml>.

Del mismo modo, y también de forma paralela (tengo 8 brazos..jajajaja), he realizado pruebas con eclipse para ver si de alguna forma podía crear algún fichero en el sistema de ficheros, para que a la hora de instalar la aplicación, me apareciese en el dispositivo. Lamentablemente esto fue ayer y no conseguí ningún avance en este sentido.

Bien, pues, aplicando la máxima que todos hemos aprendido a lo largo de nuestra larga deformación profesional !BUSCATE LA VIDA¡, se  me ocurre lo siguiente:

  1. Se levanta la Actividad principal del proyecto
  2. Dicha actividad implementa un método de validación inicial y lo llama
    1. Tratamos de levantar el fichero que se supone debe estar en …/files/…controlando la excepción
    2. Si recibimos la excepción leemos el recurso plantilla existente en /res/… (InputStream) y lo escribimos en …/file/…(OutputStream)
    3. Si no recibimos la excepción continuamos con el proceso normal (se supone que como el fichero existe no es la primera de las ejecuciones de la aplicación
  3. Se continua la carga de la actividad inicial y se continua con la ejecución normal de la aplicación.
Bien, pues a esta solución chapuzas fue a la que llegue ayer por la noche a altas horas de la madrugada. La verdad es que me fui a la cama compungido por que me jode no conseguir cerrar en condiciones mi trabajo. Ayer fue de esos días que es mejor olvidar….por que no estoy conforme con la solución planteada (por decirlo fino).
Y ya para terminar, planteo la pregunta a los lectores, por que supongo que muchos de vosotros sois ya expertos desarrolladores en esta plataforma….¿como leches lo hago?
Gracias a todos, un saludo y hasta otra.

Comments (2)

Marvell

Nov 25, 2011 at 9:32 AM

Ayer la verdad es que no le he podido dedicar demasiado tiempo al asunto, pero me da la impresión de que Android no contempla una solución como la que me he planteado….no se que alguien me corrija si no estoy en lo cierto…
Por lo que leo, toda la persistencia la tiene dirigida, o bien por propiedades o bien ya nos tenemos que ir al SQLite….no se….
Si no encuentro una solución que me convenza, reconduciré el desarrollo por SQLite.

A ver si alguien se anima y me arroja un poco de luz lo antes posible, por que sino en unos días ya no me va a hacer falta.

Gracias a todos.

Marvell

Dic 02, 2011 at 12:38 AM

Bueno, gracias a todos por vuestras respuestas, fueron de mucha ayuda como el resto de los comentarios que realizáis habitualmente en la página.

Finalmente me he decidido a usar SQLite. Saludos

El desarrollo del proyecto lo podréis consultar en la pestaña especifica que he habilitado para el mismo.

You must be logged in to post a comment.