@babaevmm

Зачем нужен ContentProvider в единичном проекте?

Всем здравствуйте!
Вот хоть убейте, но не могу понять для чего нужно использовать ContentProvider при работе с данными (SQLite) в приложении, если никакому другому приложению я доступ не собираюсь предоставлять?
В официальной документации Google так же написано, что он создан для предоставления данных "наружу". В очередном моем вопросе(https://toster.ru/q/317954) мне добрый человек (спасибо ему еще раз за ответ) советовал тоже его использовать. Начитавшись про него пришел к этому вопросу.
Неужели без него никак не организовать доступ к данным(элегантно)? Например сделать что то типа репозитория, но только без провайдера
Был совет использовать ContentProvider+CursorAdapter+CursorLoader, но тогда необходимо в БД иметь поле "_id", что мне в принципе не нужно, если у меня GUID (UUID). Опять что ли без этого никак?
  • Вопрос задан
  • 513 просмотров
Решения вопроса 1
gadfi
@gadfi
https://gamega.org
Вы ищите уникальное решение, на все случае жизни. Но так не всегда бывает, каждая задача требует свои решения.

+1

Но тогда ведь я не смогу использовать CursorLoader c CursorAdapter. Или я ошибаюсь?

да, если поле не _id то недоступен целый ряд родных фич из sdk даже по нажатию на элемент списка вы не получите его ключ (из коробки если пк _id то при клике на элемент списка вы получите его _id)

_id по сути уже стандарт для android, поэтому кроме случаев где по каким то очень важным причинам вам нужно назвать пк как то иначе, я бы рекомендовал все же называть пк _id

Например сделать что то типа репозитория, но только без провайдера

Конечно можно, но тогда целый ряд фич придется пилить самому

мне нравится ContentProvider за его простоту, но не нравится за кривое api (нет, правда, метод в котором почти все параметры частенько null в 2016 году это через чур) но его api компенсируется его стабильностью
еще раз опишу кейс его использования когда не нужно давать куда то доступ

Клиент сферического интернет магазина
для наглядности представим что у нас планшет и что экран разделен на 2 фрагмента
первый фрагмент лента товаров
второй корзина
(да странный ux но что поделать .... )

в ленте пользователь жмет на кнопку добавить в корзину, при этом волшебным образом обновляется ui во втором фрагменте при этом никакой сложной логики реализовывать для этого не нужно

думаю такого же эффекта можно добиться при использовании rxjava но придется попотеть
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Archusha
https://agaltsovav.ru/
да все в целом зависит от задачи. И привычки.

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

Вы можете и сделать репозиторий с прямыми SQL запросами или используя курсор. От проекта зависит.

Вы ищите уникальное решение, на все случае жизни. Но так не всегда бывает, каждая задача требует свои решения.

Возможно конкретно в вашем случае использование контент провайдера, тоже самое что для двух страничного сайта визитки ставить битрикс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы