Android Pushing Updates в Play Store

У меня есть приложение, которое зависит от SQLite для данных, которые заполняются xmls, поставляемыми с приложением в папке с ресурсами.

  • При запуске приложения в первый раз он устанавливает общую настройку config_run = false.
  • то я проверяю, если config_run = false, затем проанализируйте xml и выгрузите данные в db
  • set config_run = true

Теперь я понимаю, что когда я должен нажать обновление в Google Play и добавить больше контента в XML. Несмотря на то, что я изменяю версию базы данных с 1 на 2. Импорт script не будет запущен, потому что значение shared_run для общих настроек будет установлено в true.

Любые указатели на то, как справиться с этой ситуацией?

Сценарии

  • First Instal - Ver = 1, DB V = 1 (данные анализируются и сбрасываются в базу данных)
  • Ошибки Исправлены и нажмите и обновлены, но данные не изменились - ver = 1.1, DB V = 1 (Он должен просто заменить код, а не обновлять или воссоздавать базу данных)
  • Обновлено DATA и вытолкнуто новое обновление - вер. 1.2, DB = 2 (новый код не требуется, но данные необходимо воссоздать)

Поток моего приложения

  • Приложение запускает всплеск активности. Если Shared Pref - config_run равно false, то он запускает диалог выполнения и анализирует и выгружает данные в базу данных.
  • При анализе и создании БД и демпинге данных он переходит в MainActivity.

Второй случай

  • SplashActivity Runs и config_run = true, поэтому непосредственно переходит в MAIN Activity.

Как было предложено несколькими людьми ниже, если я попытаюсь заглушить данные в базе данных в onUpgrade SQLiteHelper, это произойдет только в MAinActivity, поскольку я не открываю соединение Db в SplashActivity и прогресс диалога также не будет отображаться.

Ответ 1

Вместо того, чтобы настроить общий префикс (config_run) на false и сделать его истинным, просто установите для него версию базы данных. Когда вы обновляете свое приложение, проверьте, есть ли у вас тот же номер версии в вашей общей привилегии. Вы можете сделать это, как показано ниже:

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

Ответ 2

Добавьте общий префикс номера версии, в которой вы последний раз запустили script для. В начале приложения проверьте текущую версию apk, а если она новая, запустите script и обновите pref

Ответ 3

Почему вы не хотите использовать встроенную систему управления версиями SQLite. Версия DB не зависит от версии приложения. И он делает именно то, что вы хотите. SQLiteOpenHelper? Каждый раз, когда tou меняет вашу версию db, вызывается callback onUpgrate, и вы можете пополнить свой db. Существует много примеров.

Ответ 4

Обновите xmlfiles с датой обновления и сохраните последнюю обновленную дату в sharedpref.

При запуске вы можете проверить поиск обновлений (оптимизированным образом), и если вы найдете новый файл с новой датой по сравнению с тем, как вы в последний раз знаете, что вам нужно выгрузить файл.

Всего взлома: D

Ответ 5

Две вещи, которые вы можете сделать:

  • Правильный способ: переопределить поставщика базы данных onUpdate() для импорта файла. (как было предложено выше)

  • Один сменщик: вместо проверки на ключ = "config_run" вы проверяете и устанавливаете для key = ( "config_run" + DB_VERSION), чтобы увидеть, нужен ли импорт, и, конечно, если ключ делает не существует, вы должны вернуть false. Таким образом, каждый раз, когда вы обновляете номер БД, импортное задание снова запускается.

Это не зависит от вашей версии приложения.