В чем разница между contentprovider и contentResolver в Android
В чем разница между ContentProviders и ContentResolver? Я не хочу за SQLite
база данных. Я занимаюсь разработкой приложения для СМИ.
5 ответов
Я нашел здесь какое-то объяснение. В итоге
Content Resolver разрешает URI для конкретного поставщика контента.
Контент-провайдер предоставляет интерфейс для запроса контента.
Способ запросить контент-провайдера contentResolverInstance.query(URI,.....)
ContentProviders
используются для отделения базы данных от других частей и действуют как интерфейс между вашей базой данных и пользовательским интерфейсом / другими классами. Вы должны создать свой собственный ContentProvider, чтобы делиться данными своего приложения с другими приложениями.
ContentResolver
используется для выбора правильного ContentProvider на основе ContentUris
, ContentUri может выглядеть так
Содержание: //com.android.contacts/contacts/3
- content: // называется схемой и указывает, что это ContentUri.
- com.android.contacts называется авторизацией контента, и ContentResolver использует его для разрешения уникального провайдера (в данном случае ContactProvider).
- контакты - это путь, который идентифицирует некоторое подмножество данных провайдера (например, имя таблицы).
- 3 - идентификатор, используемый для уникальной идентификации строки в подмножестве данных.
ПРИМЕЧАНИЕ. Ваше собственное приложение также может использовать этот маршрут для обработки своих данных.
Посмотрите контент-провайдеров в Android для более подробной информации
Двухслойная абстракция:
ContentResolver -> ContentProvider ->SQLiteDatabase
Основное отличие заключается в том, что упоминалось в других ответах.
ContentProvider предоставляет конфиденциальные данные вашего приложения для внешнего приложения
в то время как
ContentResolver предоставляет правильный ContentProvider среди всех ContentProvider, использующих URI.
Более глубокое понимание (двухслойной абстракции)
Давайте возьмем объезд.
Мы все знаем, что когда мы создаем базу данных SQLite, тогда база данных остается частной для вашего приложения, а это значит, что вы просто не можете делиться данными своего приложения с любым другим внешним приложением.
Как данные передаются тогда?
ContentProvider и ContentResolver являются частью android.content
пакет. Эти два класса работают вместе, чтобы обеспечить надежную и безопасную модель обмена данными между приложениями.
ContentProvider предоставляет данные, хранящиеся в базе данных SQLite, другим приложениям, не сообщая им о базовой реализации вашей базы данных.
Таким образом, он абстрагирует SQliteDatabase. Но ждать есть подвох!!!
Внешнее приложение не может напрямую обращаться к ContentProvider. Для этого вам нужно сначала взаимодействовать с другим классом, называемым ContentResolver. Think ContentResolver как средство поиска ContentProvider. Существует только один его экземпляр, и все ContentProviders вашего устройства зарегистрированы с простым URI пространства имен. Если вы хотите связаться с конкретным ContentProvider, вам просто нужно знать его URI. Передайте его ContentResolver, и он найдет провайдера, используя URI.
Теперь давайте посмотрим на самый важный метод getContentResolver().query(URI,String[] proj.....)
Что происходит, когда
getContentResolver().query(URI,String[] proj.....)
вызывается
query()
Метод принадлежит классу ContentResolver, однако он вызывает абстрактный метод query() для разрешенного ContentProvider и возвращает объект Cursor.
Таким образом, приложение External получает доступ к частной базе данных через два уровня абстракции.
Просто чтобы добавить больше очков
Вы не можете создать свой собственный класс ContentResolver, но вы всегда можете создать свой собственный класс ContentProvider
Надеюсь, у вас есть лучшее понимание
Вы также можете увидеть здесь некоторый пример кода для создания базы данных SQLite d, ContentProvider и т. Д., Но он недостаточно хорошо документирован.
Вы можете легко понять, таким образом,
Поставщики контента привыкли к
expose data
,
с другой стороны
Content Resolver являются
corresponding class
использовал кquery
и выполнятьTransactions
на техContent Providers
,
Content Resolver включает в себя query
& transaction methods
в соответствии с тем, что в ваших контент-провайдеров.
В 2020: D
Content Resolver: для запроса данных
Поставщик контента: для ответа на запросы данных
Опоздай, чем никогда. Я нашел хорошее практическое объяснение. Демонстрируя это
Предположим, вы хотите снять деньги в банке. Вам нужно будет выполнить следующие шаги
Касса в ABC Bank (Content Resolver) -> ABC Bank Gateway (Контент-провайдер) -> Bank Server (База данных).
Над кассиром не знают ни реализации банковского шлюза, ни о базе данных банка
Точно так же распознаватель контента будет запрашивать контент-провайдера, а Content Provider предоставляет эти данные, хранящиеся в базе данных SQLite, другому приложению, не информируя о реализации вашей базы данных.