В чем разница между contentprovider и contentResolver в android
В чем разница между ContentProviders и ContentResolver? Я не хочу для базы данных SQLite
. Я разрабатываю приложение для СМИ.
Ответы
Ответ 1
Я нашел какое-то объяснение здесь. В заключение
Content Resolver разрешает URI для определенного поставщика контента.
Поставщик контента предоставляет интерфейс для запроса содержимого.
Способ запроса поставщика контента: contentResolverInstance.query(URI,.....)
Ответ 2
ContentProviders
используются для абстрагирования базы данных из других частей и действуют как интерфейс между вашей базой данных и UI/другими классами. Вы должны создать свой собственный ContentProvider , чтобы поделиться своими данными приложений с другими приложениями.
ContentResolver
используется для выбора правильного ContentProvider на основе ContentUris
. ContentUri может выглядеть как
Содержание://com.android.contacts/contacts/3
- content:// называется схемой и указывает, что это ContentUri.
- com.android.contacts называется Content Authority, а ContentResolver использует его для разрешения уникальному провайдеру (в данном случае ContactProvider).
- контакты - это путь, который идентифицирует некоторое подмножество данных поставщика (например, имя таблицы).
- 3 - это идентификатор, используемый для однозначной идентификации строки в подмножестве данных.
ПРИМЕЧАНИЕ. Ваше собственное приложение также может использовать этот маршрут для обработки своих данных.
Подробнее см. Поставщики контента в Android
Ответ 3
Вы можете легко понять это,
Поставщики контента используются expose data
.
с другой стороны
Content Resolver: corresponding class
используется для query
и выполняет Transactions
на тех Content Providers
.
Content Resolver включает query
и transaction methods
, соответствующие тем, которые входят в Поставщики контента.
Ответ 4
Двуслойная абстракция:
ContentResolver → ContentProvider → SQLiteDatabase
Основное различие заключается в том, что упомянуто в других ответах.
ContentProvider предоставляет личные данные вашего приложения для внешнего приложения
в то время как
ContentResolver предоставляет правильный ContentProvider среди всех ContentProviders, используя 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, однако он вызывает метод abstract query() разрешенного ContentProvider и возвращает объект Cursor.
Таким образом, внешнее приложение получает доступ к частной базе данных через два слоя абстракции.
Просто добавьте больше очков
Вы не можете создать свой собственный класс ContentResolver, но вы всегда можете создать свой собственный класс ContentProvider
Надеюсь, у вас есть лучшее понимание
Вы также можете увидеть некоторые примеры кода здесь для создания SQLitedatabase, ContentProvider и т.д. и т.д., но его не очень хорошо документированы.