Заменить старую базу данных в ресурсах на обновленную версию

У меня есть приложение, которое использует базу данных (SQLite) в папке активов, которая копируется в папку data/data... на устройстве Android. Проблема в том, что данные в базе данных представляют собой расписание поездов, которое обновляется каждые два месяца. Чтобы еще больше усложнить ситуацию, данные находятся в сети в виде пяти CSV-файлов, которые упакованы в архив. Я написал java-скрипт, который загружает, распаковывает, анализирует нужные мне данные, создает базу данных и заполняет ее.

Есть ли способ обновить (заменить) базу данных в папке ресурсов? В этот момент простое удаление базы данных приложения для Android запустит копию новых данных.

Реальные вопросы:

  1. Могу ли я опубликовать обновленную базу данных, которая заменит базу данных?
  2. Могу ли я запустить скрипт Java?
  3. Мне нужно просто написать все это в фоновом режиме, запустив новую ветку в приложении для Android?
  4. Было бы лучше просто вручную установить базу данных и опубликовать обновление в новом APK?

Идеи?

1 ответ

Решение

Хорошо, я просто собираюсь записывать свои мысли в ответе вместо комментариев.

Как сказал CommonsWare, вы не можете обновлять файлы в assets/ dir. Они являются частью APK, то есть они скомпилированы в ваше приложение, так что вы можете заменить все приложение или вообще ничего.

У вас есть javascript для преобразования сжатых CSV-файлов с информационными файлами расписания поездов в базу данных, которую может использовать ваше приложение. Я предполагаю, что именно этот файл базы данных вы помещаете в assets /, а затем создаете свое приложение.

Поскольку ваше приложение должно обновлять свои данные время от времени, для меня наиболее очевидно, что ваше приложение может загрузить его. Загружаемая вещь должна быть готовой к использованию базой данных, а не набором заархивированных CSV-файлов.

Вы можете преобразовать заархивированные CSV-файлы в базу данных на своем компьютере для разработки, а затем поместить этот файл базы данных в место, где его может загрузить приложение.

Служба для вашего приложения может быть очень простой. Это просто должен быть статический файловый сервер, он не должен быть бэкэндом API. Если вы арендуете сервер, Nginx, Apache или IIS могут сделать это из коробки. Вы даже можете сделать это без аренды сервера, если разместите файл базы данных на Github или Dropbox.

Когда ваше приложение запускается, оно проверяет, существует ли более новая версия файла базы данных, чем та, которая у него есть в настоящее время, и если да, то оно загружает ее. После полной загрузки он может запускать тот же код, что и сейчас, для копирования из ресурсов / в данные / данные, но выполняет копирование из того места, куда он был загружен.

Другие вопросы по тегам