Реализация метода delete

Реализация метода delete

Метод delete в поставщике контента отвечает за удаление записи (или записей) на основе переданной конструкции where. Он возвращает количество удаленных строк.

Как и другие методы, метод update для выяснения типа URI использует класс UriMatcher. Если это коллекция, то передается конструкция where, чтобы она могла охватить максимальное количество записей. Если конструкция where пуста, удаляются все записи. Если это одиночная запись, то из URI извлекается идентификатор книги и оформляется в виде дополнительной конструкции where. По завершении код возвращает количество удаленных записей (см. листинг 4.6).

Определение URI с помощью класса UriMatcher

Мы уже неоднократно упоминали класс UriMatcher — пора познакомиться с ним поближе. Почти все методы поставщика контента имеют перегруженные версии в зависимости от URI. Например, один и тот же метод query() вызывается для извлечения как отдельной книги, так и списка книг; все зависит от типа запрошенного URI. Вспомогательный класс UriMatcher как раз и позволяет распознавать эти типы URI.

Вот как это работает. Экземпляру UriMatcher сообщается, какие шаблоны URI следует ожидать. С каждым шаблоном также ассоциируется уникальное число. После регистрации этих шаблонов можно выяснять с помощью UriMatcher, совпадает ли входящий URI с конкретным шаблоном.

Как было сказано ранее, поставщик контента BookProvider работает с двумя шаблонами URI: один для коллекции книг, а другой — для одной книги. Код в листинге 4.7 регистрирует оба эти шаблона с помощью UriMatcher и назначает значение 1 коллекции книг и 2 — одиночной книге (сами шаблоны URI определены в метаданных для таблицы books).

Листинг 4.7. Регистрация шаблонов URI с помощью UriMatcher

private static final UriMatcher sUriMatcher;

// Определение идентификаторов для каждого типа URI.

private static final int INCOMING_BOOK_COLLECTION_URI_INDICATOR = 1; private static final int INCOMING_SINGLE_BOOK_URI_INDICATOR = 2;

static {

sUriMatcher = new UriMatcher(UriMatcher.NO MATCH);

// Регистрация шаблона для коллекции книг.

sUriMatcher.addURI(BookProviderMetaData.AUTHORITY , "books"

, INCOMING_BOOK_COLLECTION_URI_INDICATOR);

// Регистрация шаблона для одиночной книги.

sUriMatcher.addURI(BookProviderMetaData.AUTHORITY , "books/#"

, INCOMING_SINGLE_BOOK_URI_INDICATOR);

}

После выполнения регистрации можно использовать класс UriMatcher в реализации метода query:

switch (sUriMatcher.match(uri)) {

case INCOMING_BOOK_COLLECTION_URI_INDICATOR:

case INCOMING_SINGLE_BOOK_URI_INDICATOR:

default:

throw new IllegalArgumentException("Unknown URI " + uri);

}

Метод match возвращает зарегистрированное ранее число. Конструктор класса UriMatcher принимает целочисленный аргумент для корневого URI, и UriMatcher возвращает это число, если в URL нет ни сегментов пути, ни источников. Кроме того, UriMatcher может возвратить значение NO_MATCH при несовпадении ни с одним шаблоном. Можно создать экземпляр UriMatcher и без корневого числа, при этом Android инициализирует его значением NO_MATCH. В итоге, код в листинге 4.7 можно записать следующим образом:

static {

sUriMatcher = new UriMatcher();

sUriMatcher.addURI(BookProviderMetaData.AUTHORITY , "books"

, INCOMING_BOOK_COLLECTION_URI_INDICATOR); sUriMatcher.addURI(BookProviderMetaData.AUTHORITY , "books/#"

, INCOMING_SINGLE_BOOK_URI_INDICATOR);

}

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

Добавить комментарий