Главная » Разработка для Android » Использование поставщика содержимого – ANDROID ПРИЛОЖЕНИЯ

0

 

Поскольку поставщики содержимого очень важны в Android, мы сделаем здесь краткое введение в проблему и покажем, как написать клиент, использующий поставщик содержимого. В данном примере применяется один из важнейших поставщиков содержимого – база данных Contacts (Контакты). Этот пример должен помочь вам более основательно понять, как поставщик содержимого вписывается в ваше приложение. Класс ContentProvider предоставляет центральный АРІ для поставщиков содержимого, от которого можно производить подтипы для управления конкретными типами данных. Активности обращаются к экземплярам конкретного поставщика содержимого, используя класс ContentResolver и связанные с ним URL следующим образом:

При работе с поставщиком содержимого мы, в частности, вызываем его операции с данными, при которых применяются уникальные идентификаторы ресурсов в стиле REST. Эти идентификаторы определяются в классе UriMatcher, который предоставляет простую утилиту сопоставления строк для работы с URL на основе REST. Эта программа среди прочего поддерживает работу со строками, содержащими подстановочные (джокерные) символы. URL поставщиков содержимого всегда имеют следующую форму:

Здесь authori ty (источник) – Java-пакет пространства имен поставщика содержимого (зачастую это относящееся к Java пространство имен реализации поставщика содержимого). Вот два примера уникальных идентификаторов ресурса, используемых с поставщиками содержимого:

Когда разработчик вызывает метод query применительно к поставщику содержимого, вызов возвращает объект Cursor, реализующий интерфейс android. database. Cursor. Этот интерфейс позволяет получить один результат (например, строку из базы данных) за раз при помощи индекса, который автоматически обновляется при каждом получении нового результата. Разработчики, знакомые с технологией JDBC (взаимодействие Java и баз данных), могут сравнить эту ситуацию с использованием java.sql.ResultSet. В большинстве случаев объекты Cursor представляют результаты запросов к таблицам базы данных SQLite. Разработчик может получить доступ к полям курсора, пользуясь индексами из базовой таблицы SQLite. Вот пример итерирования курсора в Android и доступа к его полям:

Здесь следует отметить, что всякий раз, когда клиент использует курсор от поставщика содержимого, курсор необходимо закрывать после окончания работы клиента с ним. Если этого не сделать, может получиться серьезная утечка памяти, которая в итоге может привести к краху приложения. В Android применяются два метода, которые позволяют гарантировать, что курсоры поставщика будут непременно закрыты, если не используются:

активность напрямую вызывает Cursor. close;

активность вызывает или managedQuery для запрашивания поставщиков содержимого, или startManaging Cursor (Cursor). В обоих случаях работа основана на системе, наблюдающей за ссылками на курсоры и позволяющей узнать, когда у конкретной ссылки не остается активных клиентов. Когда счетчики ссылок показывают, что все клиенты закончили работу, система сама вызывает Cursor. close.

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

По теме:

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