Учебники по Android для начинающих, часть 4: поставщик контента



В этом руководстве для Android обсуждаются концепции Content Provider. Это важный строительный блок Android, облегчающий обмен данными в системе Android.

В наших предыдущих руководствах по Android для начинающих мы обсуждали первые три строительных блока Android: Мероприятия , Намерение и Сервисы . Эта статья является четвертой в этой серии руководств по Android для начинающих, в ней обсуждается поставщик контента, который является еще одним очень важным компонентом системы Android.

Content Provider - это посредник вашей системы Android, облегчающий обмен данными между различными приложениями Android. Давайте немного рассмотрим это в этом руководстве по Android.





Учебник Android для начинающих-4 Бонуса: Загрузите код поставщика контента здесь . Вам понадобится этот код после того, как вы изучите руководство! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Код загрузки ”desc =” ”type =” ”align =” ”for =” download ”]



Руководства по Android: поставщик содержимого

Content Provider облегчает доступ к центральному хранилищу данных или хранилищу, чтобы обеспечить совместное использование данных и манипулирование данными между различными приложениями.

Вот несколько примеров поставщиков контента по умолчанию в API системы Android:

Руководства по Android: поставщики контента по умолчанию в системе Android



Эти поставщики контента позволяют пользователю абстрагироваться от базовой базы данных. Как правило, поставщики контента используют SQLite для хранения базовой базы данных.

Давайте возьмем всегда полезный пример старого доброго приложения Facebook, которое помогло нам упростить вещи и в предыдущих руководствах по Android!

Все вы в какой-то момент своей жизни в социальных сетях загрузили картинку на свою хронику Facebook, верно! Как ты сделал это?

Нажав кнопку «Фото» на стене, вы попадаете в фотогалерею. Оттуда вы можете выбрать фотографию для загрузки.

Прочитав предыдущие статьи Серия руководств по Android , вы знаете о действиях и намерениях, поэтому вы знаете, что происходит следующее:

Ваша стена Facebook - это «ДЕЯТЕЛЬНОСТЬ». Когда вы нажимаете кнопку «Фото», передается «НАМЕРЕНИЕ», которое передает сообщение, и открывается «ПОСТАВЩИК КОНТЕНТА» (фотогалерея). Фотография загружена с помощью сетевой загрузки «СЕРВИС».

Посмотрите это видео в прямом эфире, чтобы узнать, как поставщик контента работает в вашем приложении Facebook.

Зачем системе Android нужны поставщики контента?

Потребность в поставщиках контента возникает из-за того, что база данных, созданная в одном приложении, не видна для другого приложения.

Создавать и хранить базу данных в разных приложениях с помощью SQLite просто, но проблема в следующем: база данных в Android является частной для приложения, которое ее создает . В Android нет общей области хранения, к которой может получить доступ каждое приложение. Следовательно, чтобы различные приложения могли использовать базу данных, системе Android необходим интерфейс, который позволяет осуществлять такой обмен данными между приложениями и процессами. Именно здесь на помощь приходит контент-провайдер.

Мне действительно нужен контент-провайдер?

1) Вы не нужно разрабатывать собственного провайдера, если вам нужна частная база данных для конкретного приложения (эта база данных не будет доступна другим приложениям, кроме того, которое ее создало).

плюсы и минусы взлома

2) Однако вы нужен пользовательский поставщик для предоставления пользовательских предложений поиска в вашей собственной системе приложений.

3) Вам также понадобится поставщик контента. для копирования и вставки сложных данных из вашего приложения в другие приложения.

Какие операции поддерживает контент-провайдер?

Поставщики контента поддерживают следующие основные операции:

один) Запрос: Запрашивает у поставщика содержимого все объекты на основе указанного URI.

Java имеет отношения

2) Удалить: Удаляет указанные объекты из базы данных поставщика содержимого.

3) Обновить: Выполняет обновления объектов в базе данных.

4) Вставить: Вставляет новый объект в базу данных.

Шаги для выполнения операции в Content Provider

Шаг 1. Доступ к поставщику контента

Клиентский объект ContentResolver используется для доступа к данным от Content Provider. Он связывается с объектом-провайдером, который, в свою очередь, принимает запрос на доступ к данным и возвращает желаемые результаты. Интерфейс обмена данными, предоставляемый поставщиком и клиентским объектом поставщика, позволяет осуществлять обмен данными между различными процессами / приложениями.

Приложение, которому требуется доступ к базе данных, должно объявить об этом и запросить разрешения в своем файле манифеста. Это будет подробно обсуждено в наших последующих руководствах по Android.

URI контента

URI контента - это один из аргументов, используемых для идентификации данных в поставщике. Он состоит из четырех частей:

один) Схема: Схема для контент-провайдера имеет постоянное значение: «контент».

2) Орган власти: Это символическое имя поставщика, уникальное для каждого из них. Вот как мы выделяем желаемого поставщика контента из такого множества.

3) Дорожка: Дорожка помогает отличить необходимые данные от полной базы данных . Например, поставщик содержимого журнала вызовов различает пропущенные вызовы, принятые вызовы и т. Д., Используя разные пути.

4) МНЕ БЫ: Это не обязательный компонент и может не присутствовать в URI, но если присутствует, он должен быть числовым. Например, если вы хотите получить доступ к определенному музыкальному файлу от вашего поставщика мультимедийного контента, вы также должны указать идентификатор .

Процесс

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

URI бывают двух типов:

Кроме того, URI также могут содержать ограничивающую информацию.

Шаг 2. Как получить данные от контент-провайдера

Несмотря на то, что ContentResolver теперь имеет доступ к таблице данных, он не может получить требуемые данные, если у приложения нет «Разрешение на чтение» для этого конкретного провайдера. Это разрешение определяется в файле манифеста каждого поставщика содержимого.

Все это приложение (который хочет получить доступ к этой базе данных) должен запросить это разрешение.

Теперь, как обсуждалось ранее в этом руководстве по Android, четыре операции могут быть выполнены с помощью контент-провайдера . Мы пройдемся по каждому по отдельности.

ЗАПРОС

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

Вот аргументы, используемые при запросе:

один) НЕНАВИДЕТЬ : Работает точно так, как описано выше.

2) Проекция: Запрос должен вернуть набор столбцов из всей таблицы базы данных . Это называется проекцией. Передача null вернет все столбцы, что неэффективно.

3) Пункт о выборе: К фильтр, объявляющий, какие строки возвращать , отформатированный как SQL-предложение WHERE (за исключением самого WHERE). Передача null вернет все строки для данного URI.

Например, если вы введете алфавит (скажем, «P») в столбец поиска своей адресной книги, то он вернет все контактные данные, начинающиеся с «P». Однако, если вы ничего не вводите в строку поиска, будет извлечен полный список контактов (в таких случаях для условия выбора устанавливается значение «null»).

4) Аргумент выбора: Вы можете включить «? S» в выделение, которое будет заменено значениями из selectionArgs в том порядке, в котором они появляются в выделении.

5) Порядок сортировки: Предложение SQL ORDER BY (за исключением самого ORDER BY). Передача null приведет к получению результатов, которые могут быть неупорядоченными.

ПРИМЕР КОДА для запроса:

  • Поиск телефонных номеров в контактах
Cursor cursor = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) Имя строки = cursor.getString (курсор .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Integer.parseInt (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT =? , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Номер телефона:' + phoneNo + ''} phoneCursor.close ()}}}

ВСТАВКА

Предположим, вы хотите добавить новые контакты в свою адресную книгу. ContentValues ​​объект используется для этих вставок. Для этого ключи объекта ContentValue и столбцы Content Provider должны совпадать. Вот пример:

ПРИМЕР КОДА ДЛЯ ВСТАВКИ:

  • Операция заключается в вставке новой записи с именем «Rajnikant» и номером «9988999888».
// Операция ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) ._NAME, nullCOUNT (RawContacts.AC). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_NVAL_TYPE) .CONTENT_ITEM_NYPALIS). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUM9. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ОБНОВЛЕНИЕ

Для обновления контент-провайдера используются следующие аргументы:

один) НЕНАВИДЕТЬ: URI контент-провайдера

2) ContentValues: Он содержит значения, которые заменят существующие данные.

3) Пункт о выборе: Это может помочь выбрать конкретные записи для обновления.

4) Аргумент выбора: Вы можете включить «? S» в выделение, которое будет заменено значениями из selectionArgs в том порядке, в котором они появляются в выделении.

Еще раз, ключи объекта ContentValues ​​должны соответствовать столбцам в Content Provider в противном случае обновление не произойдет.

ПРИМЕР КОДА ДЛЯ ОБНОВЛЕНИЯ:

  • Обновление номера телефона с именем «Раджникант»
Строка где = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {«Rajnikant»} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (где, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, «9876543210») .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

УДАЛЕНИЕ

При удалении используются те же аргументы, что и при обновлении, за исключением аргумента ContentValues, который не требуется, поскольку не будет никаких заменяемых значений.

ПРИМЕР КОДА ДЛЯ УДАЛЕНИЯ:

  • Удалите контакт с именем «Раджникант».
Строка где = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {«Rajnikant»} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (где, params) .build ()) getContentResolver ( ) .applyBatch (КонтактыContract.AUTHORITY, ops)

В случае операции Insert URI должен быть основан на каталоге. Во всех остальных случаях URI могут быть основаны на идентификаторах или каталогах.

Мы надеемся Руководство по Android для начинающих: часть 5 было не так уж сложно понять! Мы обсудим больше о поставщиках контента в последующих руководствах по Android. Наслаждайтесь изучением основ до тех пор!

зарплата Java-разработчиков в Индии

У вас есть какие-либо сомнения в этом руководстве для Android? Спроси нас.

Удачного обучения!

При создании этого руководства для Android были использованы следующие ресурсы! Официальные разработчики Android , Edureka.in

Вам также могут понравиться эти похожие сообщения: