Actualizaciones de Android en Play Store
Tengo una aplicación que depende de SQLite para los datos que se rellena con xmls enviados con la aplicación en la carpeta de activos.
- Cuando ejecuta la aplicación la primera vez que establece una preferencia compartida config_run = false.
- Entonces comprobar si config_run = false luego analizar el xml y volcar los datos en db
- Set config_run = true
Ahora me doy cuenta de que cuando tengo que empujar una actualización en Google Play y añadir más contenido en el XML. Aunque cambie la versión de la base de datos de 1 a 2. La secuencia de comandos de importación no se ejecutará porque el valor config_run de preferencia compartida se establecerá en true.
- Conexión de SQLite se filtró aunque todo se cerró
- Android SQLiteException: Error al cambiar la configuración regional de db a 'en_US'
- Android SqliteAssetHelper - fusionar las tablas de la base de datos del activo con el existente
- La escritura concurrente a la base de datos android (de múltiples servicios)?
- ¿Por qué no puedo usar Resources.getSystem () sin un error de tiempo de ejecución?
¿Alguna sugerencia sobre cómo manejar esta situación?
Escenarios
- Primera instalación – Ver = 1, DB V = 1 (Los datos se analizan y se descargan en la base de datos)
- Bugs Corregido y empujar y actualizar, pero no ha cambiado ningún dato – ver = 1.1, DB V = 1 (Debe reemplazar el código y no actualizar o volver a crear la base de datos)
- Actualizó los DATOS y empujó una nueva actualización – ver 1.2, DB = 2 (No hay código nuevo, pero los datos tienen que ser re-creado)
El flujo de mi aplicación
- La aplicación comienza actividad de salpicadura. Si Shared Pref – config_run es igual a false entonces inicia un Progress Dialog y analiza y descarga los datos en la base de datos.
- Al analizar y crear DB y los datos de vertido va a MainActivity.
Segundo caso
- SplashActivity Runs y config_run = true así que directamente va a MAin Activity.
Como Sugerido por pocas personas abajo si trato de mudo los datos en la base de datos en onUpgrade de la SQLiteHelper que sucederá sólo en MAinActivity como no abrir una conexión Db en el SplashActivity y el progreso de diálogo no se mostrará también.
- Cursor finalizado sin cerrar antes () Android
- Intentando probar SQLiteOpenHelper pero getWritableDatabase () lanza Null
- Cómo insertar a granel en sqlite en android
- Java - java.lang.IllegalStateException: No se pudo leer la fila 0, col -1 de CursorWindow
- AsyncTask de Android y instancia de SQLite DB
- Ejemplo de Android SQLite
- Cómo funciona SQLiteOpenHelper Context
- SQLiteOpenHelper "onCreate" no se llama? (El DB no existe)
En lugar de configurar tu pref compartido (config_run) como false y hacer que sea verdad, simplemente establece la versión de la base de datos en él. Cuando actualice su aplicación, compruebe si tiene el mismo número de versión en su pref. Compartido. Puede hacer esto como se muestra a continuación:
configRun = settings.getInt("database_version", 0); if ((DBAdapter.DATABASE_VERSION) == configRun) { //skip xml parsing } else { //first time configRun will be "0" and DBAdapter.DATABASE_VERSION will be 1 // so you need to parse your xml here and set configRun =1 //on update, change your DB version to 2. now again your configRun and DBAdapter.DATABASE_VERSION will mismatch and you can parse your xml. }
Agregue un pref compartido del número de versión por el que ejecutó por última vez el script. En el inicio de la aplicación, compruebe la versión actual de apk y, si es más reciente, vuelva a ejecutar el script y actualice el pref
¿Por qué no quieres utilizar construido en sqlite sistema de control de versiones. La versión de DB es independiente de la versión de la aplicación. Y hace exactamente lo que quieres. SQLiteOpenHelper ? Cada vez que cambia tu versión de db, se llamará una devolución onUpgrate y podrás rellenar tu db. Hay muchos ejemplos.
Haga que sus archivos xml terminen con la fecha de la actualización y guarde la última fecha actualizada en sharedpref.
En el lanzamiento puede comprobar la búsqueda de actualizaciones (de una manera optimizada) y si encuentra un nuevo archivo con una nueva fecha en comparación con la última vez que sabe que necesita volcar el archivo.
Trabajo de hacker total: D
Dos cosas que puedes hacer:
-
La forma correcta: reemplaza onUpdate () del proveedor de base de datos para importar el archivo. (Como se sugiere más arriba)
-
El cambiador de una línea: En lugar de chequear key = "config_run", comprueba y establece para key = ("config_run" + DB_VERSION) para ver si la importación es necesaria y, por supuesto, si la clave no existe, debe devolver falso. De esta manera, cada vez que actualice el número de DB, el trabajo de importación se ejecutará de nuevo.
Esto es agnóstico para la versión de tu aplicación.
- Cómo agregar dos campos de texto de edición o vistas en un cuadro AlertDialog?
- Disposición relativa de Android align parent right