Главная » Разработка для Android » НАПИСАНИЕ И ИНТЕГРАЦИЯ ПОСТАВЩИКА СОДЕРЖИМОГО

0

 

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

Типичные задачи, решаемые поставщиком содержимого

В следующих разделах приводится общее руководство по решению задач, связанных с написанием поставщика содержимого. Здесь будет сделано введение в паттерн MVC («Модель-вид-контроллер»), применяемый в Android, и завершено объяснение кода Simpl eFinchVideoContentProvider.

Дополнение поставщика содержимого

Приложения расширяют класс ContentProvider для управления уникальными идентификаторами ресурсов, относящимися к данным конкретных типов – например, MMS-сообщениям, изображениям, видео и т. д. Допустим, при работе с классом поставщика содержимого, который обрабатывает видеоинформацию, метод ContentProvider. insert вставляет данные, описывающие видео, в столбцы таблицы базы данных SQLite, подходящие для такой информации. В частности, это могут быть столбцы с заголовком, описанием видео и т. п.

Начнем написание поставщика содержимого С реализации следующих двух методов:

onCreate – предоставляет точку привязки, позволяющую вашему поставщику содержимого инициализироваться. Любой код, который вы хотите выполнить однократно, например код, устанавливающий соединение с базой данных, должен находиться в этом методе;

String getType(Uri uri) – возвращает МІМЕ-тип данных, предоставляемых поставщиком содержимого по данному уникальному идентификатору ресурса. Идентификатор (URI) приходит от клиентского приложения, заинтересованного в доступе к данным.

На следующем этапе реализации переопределяются основные методы поставщика содержимого, обеспечивающие доступ к данным.

insertCUri uri. ContentValues values) – вызывается, когда клиентскому коду требуется вставить информацию в базу данных, обслуживаемую вашим поставщиком содержимого. Как правило, реализация этого метода прямым или косвенным образом вызывает операцию вставки, применяемую к базе данных.

Cursor query(Uri uri, Stringt] projection. String selection, String[] selectionArgs, String sortOrder) – вызывается каждый раз, когда клиенту требуется считать информацию из базы данных поставщика содержимого. Как правило, здесь получение данных происходит при помощи предложения SELECT на языке SQL, а в ответ на него возвращается курсор, содержащий запрошенные данные. Разработчики вызывают этот метод опосредованно, при помощи метода managedQuery Activity, либо применяют метод startManagi ngQuery к значениям, возвращаемым от описываемого метода. Если активности не удается справиться с возвращенным курсором либо не удается закрыть курсор, то в приложении возникнет серьезная утечка памяти, что чревато низкой производительностью, а возможно – и аварийным завершением программы.

update(Uri uri, ContentValues values, String selection, String[] selectionArgs) – вызывается всякий раз, когда клиенту требуется обновить одну или более строк в базе данных поставщика содержимого. Он преобразуется в предложение UPDATE на языке SQL.

delete(Uri uri, String selection, String[] selectionArgs) – вызывается каждый раз, когда клиенту требуется удалить одну или более строк в базе данных поставщика содержимого. Он преобразуется в предложение DELETE на языке SQL.

Каждый из этих четырех методов совершает действия применительно к данным, на которые ссылается конкретный URI. Типичная реализация каждого из этих методов начинается с сопоставления аргумента входящего URI с определенным типом данных. Например, реализация поставщика содержимого должна определить, ссылается ли URI на конкретный видеоролик или на группу видеороликов. После того как поставщик сопоставляет URI с данными, выполняются соответствующие операции SQL. Затем каждый метод возвращает значение. Это значение либо содержит данные, на которые указывает ссылка, либо описывает данные, затронутые операцией, либо ссылается на количество элементов, которые были затронуты в результате операции. Например, на запрос конкретного видеоролика будет возвращен курсор, содержащий только один видеоэлемент, если заданный уникальный идентификатор ресурса ссылался на единственный элемент, который присутствует в локальной таблице.

Сопоставление URI с табличными данными – важнейшая часть работы, которую выполняет поставщик содержимого. Конечно, можно подумать, что не так уж сложно будет провести синтаксический разбор URI поставщика содержимого самостоятельно, но в Android предоставляется отличная утилита, способная сделать эту работу за вас. Она не только удобна, но и, что гораздо важнее, помогает разработчикам использовать тот формат URI поставщика содержимого, который мы рассмотрели выше, в качестве стандарта. Класс URIMatcher обеспечивает отображение URI, содержащих строки источника, пути и идентификатора, на определенные приложением константы, используемые с предложениями case, которые занимаются обработкой конкретных подтипов URI. На этом этапе поставщик может определить, какими операциями SQL он будет пользоваться для управления строками таблицы. Типичный поставщик содержимого создает статический экземпляр URIMatcher и заполняет его при помощи статического инициализатора. Этот инициализатор вызывает URI Matcher.addURI для организации сопоставления первого уровня (first-level mapping), которое позже используется в методах поставщика содержимого. О том, как это делается в нашем простом поставщике видеосодержимого, рассказано в подразделе «Класс SimpleFinchVideoContentProvider и переменные экземпляров» далее.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии