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.

  1. Cuando ejecuta la aplicación la primera vez que establece una preferencia compartida config_run = false.
  2. Entonces comprobar si config_run = false luego analizar el xml y volcar los datos en db
  3. 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.

¿Alguna sugerencia sobre cómo manejar esta situación?

Escenarios

  1. Primera instalación – Ver = 1, DB V = 1 (Los datos se analizan y se descargan en la base de datos)
  2. 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)
  3. 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

  1. 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.
  2. Al analizar y crear DB y los datos de vertido va a MainActivity.

Segundo caso

  1. 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.

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:

  1. La forma correcta: reemplaza onUpdate () del proveedor de base de datos para importar el archivo. (Como se sugiere más arriba)

  2. 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.

  • SQLiteOpenHelper - crear base de datos en tarjeta SD
  • Robolectric: ejecutar múltiples pruebas falla
  • Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
  • El objeto de conexión de SQLite se filtró - Android
  • SQLiteOpenHelper múltiples bases de datos en memoria
  • Intenta reabrir un objeto ya cerrado: sqlitequery
  • Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
  • GetReadableDatabase a menudo, pero no siempre devuelve null
  • Archivo DB en carpeta de activos. ¿Se actualizará?
  • Android no actualiza la base de datos SQLite
  • Android obtener la imagen de disco de base de datos es malformado (código 11) error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.