Расширение класса Contentprovider
Для реализации нашего примера поставщика контента BookProvider необходимо расширить класс ContentProvider, переопределить метод onCreate() и реализовать методы query, insert, update, delete и getType. В этом разделе описаны настройка и создание базы данных, а конкретные методы будут реализованы ниже. Полный исходный код класса приведен в листинге 4.6. Важные части кода выделены полужирным.
Метод query требует наличия множества столбцов, которые ему нужно возвратить. Это похоже на оператор select, требующий указания имен столбцов и их синонимов после конструкции as. В Android используется объект map, который обращается к отображению projection для представления имен столбцов и их синонимов. Нам необходимо создать это отображение, чтобы использовать его в дальнейшем при реализации метода запроса. В коде реализации поставщика (см. листинг 4.6) это сделано заранее в составе отображения Project.
Большинство методов, которые предстоит реализовать, принимают на входе URI. Все URI, на которые может реагировать данный поставщик контента, начинаются одинаково, но их хвостовые части отличаются — как и в случае веб-сайта. Все URI, даже одинаковые в начале, должны быть разными для обозначения различных данных или документов.
Продемонстрируем это на примере:
Uril: content://com.androidbook.provider.BookProvider/books Uri2: content://com.androidbook.provider.BookProvider/books/12
Поставщик книг должен уметь различать такие URI. Но это еще простой пример. Если бы поставщик книг содержал не только книги, но и другие объекты, понадобились бы дополнительные URI для идентификации объектов подобного рода.
Реализации поставщика требуется механизм для различения URI друг от друга; для этой цели в Android используется класс UriMatcher. Таким образом, нам нужно создать этот объект и настроить его на все вариации URI. Этот код также присутствует в листинге 4.6 после создания проекции. О классе UriMatcher мы еще поговорим в разделе “Определение URI с помощью класса UriMatcher”.
После этого в листинге 4.6 переопределяется метод onCreate() для создания базы данных, а затем приводятся реализации методов insert() , query() , update() , getType() и delete() . Их код также представлен в листинге 4.6, а объяснения будут даны в специальном подразделе.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.