Архитектура Android: использование нескольких ContentProviders и события onUpgrade - PullRequest
0 голосов
/ 20 мая 2011

В моем приложении две таблицы базы данных: Products и ShoppingCard. Поэтому я создал ProductContentProvider и ShoppingCardContentProvider. Каждый ContentProvider вызывает в своем методе onCreate() закрытый класс, который является потомком SQLiteOpenHelper.

  1. С моей точки зрения, я бы создал глобальную статическую переменную DATABASE_VERSION в разделенном ConfigBean , который отвечает за обоих поставщиков контента , Так что, если я обновлю, все таблицы будут обновлены.
    => Это не работает. Просто событие onUpdate никогда не вызывается.

  2. Если вы укажете DATABASE_VERSION в каждом поставщике контента, но с различными номерами версий в каждом поставщике контента
    => Это не работает. Также это не имеет смысла, с моей точки зрения, потому что параметр в SQLiteOpenHelper называется DATABASE_VERSION , а не TABLE_VERSION. Другими словами, вы не можете обновить любую таблицу, не обновив / не выбросив событие на всех onUpgrade слушателей.

  3. Если вы укажете DATABASE_VERSION в каждом поставщике контента, но с равными номерами версий в каждом поставщике контента.
    => Это работает.

Вопрос:

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

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Решением моей проблемы было создание базового класса для обоих поставщиков контента. Этот класс содержит единственный экземпляр SQLiteOpenHelper. Это также гарантирует, что все таблицы базы данных созданы. Я нашел эту информацию в сообщении Али Сергини, 5 ноября 2010 года .

0 голосов
/ 24 мая 2011

Хорошо, я нашел причину странного поведения:

Я думаю, что мой подход сделать DATABASE_VERSION внешним параметром верен, если у вас есть несколько ContentProviders.

Я просто забылчто есть еще один ContentProvider: простая ConfigTable для хранения настроек.Я думаю, что в конце концов я смешал разные значения DATABASE_VERSION, что приводит к повторному созданию базы данных при каждом запуске.

После ссылки на один параметр из всех ContentProviders все работало как ожидалось.

Спасибо, Себастьян

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...