В приложении Android, должен ли я иметь одного поставщика контента на таблицу или только одного для всего приложения? - PullRequest
5 голосов
/ 29 мая 2010

У меня многолетний опыт разработки на Microsoft .NET (в первую очередь на C #), и я работал над тем, чтобы быстрее освоить Android и Java. Пока что я создал небольшое приложение с парой экранов и работающим поставщиком контента.

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

Я создал еще пару провайдеров контента для других таблиц и столкнулся с IllegalArgumentException «Неизвестный URI», когда попытался их протестировать. Исключение вызывает один из моих контент-провайдеров, но не тот, которому я намеревался позвонить.

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

Существуют ли передовые практики и / или примеры для работы с несколькими таблицами в приложении Android? Должен ли я иметь одного поставщика контента для каждой таблицы или только один для всего приложения? Если первое, как я могу разрешить URI для соответствующего поставщика? Если последнее, как я могу предотвратить загрязнение кода моего поставщика контента операторами switch?

Ответы [ 2 ]

10 голосов
/ 05 января 2012

Ну, я должен не согласиться с CommonsWare. Если вы хотите избежать IllegalStateExceptions и других проблем, вам нужно использовать Cursorloader. Они обрабатывают несколько вещей для вас и убедитесь, что курсоры гладкие. Поэтому вам нужны контент-провайдеры. На начальный вопрос пока не ответили, пока не подумали. я не знаю, что лучше всего использовать для числа или поставщиков контента и таблиц. но в методе .query вы проверяете идентификатор URI. Вы можете проверить, имеет ли идентификатор URI определенное значение, и построить свой запрос таким образом.

2 голосов
/ 30 мая 2010

99% приложений Android не нуждаются в поставщиках контента.

У контент-провайдеров есть одно основное применение: межпроцессное взаимодействие. Если вы:

  • ожидает, что другие разработчики получат доступ к вашим контент-провайдерам, или
  • интегрируются с Android в тех местах, где требуется поставщик контента (например, предложения для поиска в окне быстрого поиска)

тогда и только тогда вы реализуете контент-провайдера.

В противном случае все, что вы делаете - это добавляете накладные расходы к своему приложению и усложняете поддержку кода.

Итак, если ваше приложение относится к 99%, которым не нужны поставщики контента, просто избавьтесь от того, что у вас есть, и получите доступ к своему контенту другими способами (например, SQLiteDatabase).

...