![]() |
|
| 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 |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||
|
La primera vez que compilo e ingreso al activity donde seteo y leo datos a la BD, me ingresa datos a la BD y los me los muestra. Cuando intento ingresar nuevamente al activity me bota la aplicación. Solo funciona (una vez) cuando le cambio la versión de la BD en el constructor.
Alguien me podría ayudar con el error? Saludos y gracias!. Activity Cita:
Cita:
|
|
|
|
#2
|
||||
|
||||
|
Al ejecutar la segunda vez la aplicación vuelves a ejecutar esto:
helper.insertarReg("pepe1", "3"); helper.insertarReg("pepe2", "2"); helper.insertarReg("pepe3", "1"); Y por tanto tu base de datos pasa a tener 6 registros (3 duplicados). Después ejecutas esto: int contador=0; for(c.moveToFirst();!c.isAfterLast();c.moveToNext( )){ result[contador] = c.getString(id)+" "+c.getString(iu)+" "+c.getString(ip) +"\n"; contador++; } Habiendo establecido que el Array Result tiene un tamaño de 3, pero como tu BD tiene 6 registros el for querrá hacer los 6 registros, así que cuando va a hacer: result[contador] = c.getString(id)+" "+c.getString(iu)+" "+c.getString(ip) +"\n"; con contador=3 te da un ArrayOutOfBoundException, porque estás intentando meter una 4ª posición en un Array que tiene 3. Soluciones: 1) No vuelvas a meter lo mismo 2 veces, o al menos controla lo que metes en la BD 2) En vez de un Array de tamaño fijo usa un ArrayList que tiene tamaño dinámico. |
| Gracias de parte de: | ||
|
#3
|
|
Agradeciendo tu respuesta, tengo otra pregunta al respecto. ¿Por qué solo funciona al cambiar el número de versión a uno siguiente, si es que lo volví a compilar? ¿Al compilar de nuevo no se crea todo de nuevo? y cómo se podría controlar desde el activity, que sólo se ingresen esos 3 registros y nada mas?.
Saludos y Gracias! Última edición por marellanor Día 23/08/14 a las 02:42:45 |
|
#4
|
||||
|
||||
|
Las bases de datos SQLite tienen como propósito que los datos de la aplicación se mantengan entre ejecuciones, incluso si creas una versión nueva de la aplicación y la instalas que se sigan manteniendo. Por eso si vuelves a compilar e instalar la app los datos siguen estando.
Pero si cambias el número de la versión se ejecuta el proceso onUpgrade de la base de datos, que en este caso lo que hace es destruir la BD y volverla a crear, y por tanto eliminar los registros. Si sólo quieres que tu app tenga esos 3 registros y ninguno más puedes hacerlo de 2 formas: 1) Introducir los registros en el onCreate de la BD, así sólo se ejecutará cuando la BD se cree la primera vez (o se actualice) 2) Antes de introducir los registros consultrar si la BD ya tiene registros. |
|
#5
|
|
|
Ahora me queda super claro. Muchas gracias por tu respuesta.
Ahora acotando a las 2 opciones que me das para solucionar el problema. En el hito 1: Debería ser así? Cita:
Y la segunda opción, tú como lo harías?. Saludos y Gracias!! |
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
| Herramientas | |
|
|
Hora actual: 14:32:08 (GMT +1)
HTCMania: líderes desde el 2007





