Что такое контент-провайдер?

Я только что выполнил руководство на developer.android.com, чтобы создать адаптер синхронизации для функции провайдера "синхронизация между локальная БД с серверной БД», и после кровавых проб и ошибок мне удалось заставить ее работать (onPerformSync успешно вызвал).

И теперь для следующего шага по созданию функции синхронизации, из того, что я прочитал в нескольких статьях, мне нужно создать файл content provider. Я уже прочитал https://developer.android.com/guide/topics/providers/content-provider-basics.html, но я до сих пор не понимаю, как это работает.

по этой ссылке https://developer.android.com/guide/topics/providers/content-provider-basics.html, у меня возникло несколько вопросов:

  1. о чем table они говорят? они говорят о таблице sqlite или о какой-то «другой» таблице?

  2. content://user_dictionary/words что это за ури? это uri для файла таблицы, где хранится sqlite? если да, то откуда мне знать мой? Я имею в виду, где моя таблица sqlite хранит созданную мной таблицу?

  3. из того, что я прочитал (если я правильно понял), ContentProvider точно так же, как репозиторий. у них одинаковый функционал? Я уже создал свой репозиторий, используя anko https://gist.github.com/mockiemockiz/a552a669d28a3c90c144bc1542b86a5e> , могу ли я использовать этот код/преобразовать этот код в ContentProvider, который может сообщить адаптеру синхронизации, что данные изменились?


person Kakashi    schedule 19.12.2017    source источник


Ответы (1)


Я только что следовал руководству на developer.android.com, чтобы создать адаптер синхронизации для функции провайдера «синхронизация между локальной базой данных с серверной базой данных», и после кровавых проб и ошибок мне удалось заставить ее работать (onPerformSync успешно вызвал).

FWIW, SyncAdapter не особенно популярен.

о каком столе идет речь?

Слово «таблица» встречается на этой странице 40 раз. У нас нет возможности узнать, какой из этих 40 касается вас, и они используют этот термин по-разному.

что это за ури?

Это Uri, указывающий на набор данных ("таблицу") в user_dictionary ContentProvider.

это uri для файла таблицы, где хранится sqlite?

Это решать разработчику ContentProvider. ContentProvider API не указывает, где хранятся данные. Он может храниться в SQLite, в файле JSON или где-то еще. Соглашение гласит, что набор данных, предоставляемых ContentProvider, сопоставляется с таблицей или представлением SQLite, но это не обязательно.

если да, то откуда мне знать мой?

Вы знаете, что это ваш ContentProvider, если вы использовали user_dictionary в качестве полномочий (см. android:authorities в элементе <provider> в манифесте).

Я имею в виду, где моя таблица sqlite хранит созданную мной таблицу?

Это зависит от вас. ContentProvider не имеет ничего общего с SQLite, если только вы не пишете код, связывающий реализацию ContentProvider с SQLite.

ContentProvider как репозиторий

Не совсем, по крайней мере, с точки зрения того, как я использую термин «репозиторий». ContentProvider — это оболочка для некоторого механизма хранения данных, позволяющая внешним сторонам контролировать доступ к этим данным.

могу ли я использовать этот код/преобразовать этот код в ContentProvider, который может сообщить адаптеру синхронизации, что данные изменились?

Это было бы довольно сложно. Это одна из причин, почему немногие разработчики используют SyncAdapter.

person CommonsWare    schedule 19.12.2017
comment
ааа, хорошо, у меня есть другой вариант, кроме использования syncadapter? пожарный магазин? я не думаю, что мы готовы перейти на использование no-sql. - person Kakashi; 19.12.2017
comment
@Kakashi: у меня есть другой вариант, кроме использования syncadapter? -- вы общаетесь со своим сервером, используя любой протокол, который поддерживает ваш сервер (например, REST, GraphQL). Вы планируете работу, используя AlarmManager или JobScheduler. - person CommonsWare; 19.12.2017