2015-08-23 2 views
-1

Как установить источник данных для пользовательского загрузчика, если он не используется поставщиком контента? Мне нужно заполнить список из sqlite, но не хочу создавать поставщика контента для базы данных, вместо этого вы хотите использовать загрузчик для извлечения данных из базы данных. Итак, как мне установить sqlitedatabase в качестве источника данных пользовательского загрузчика?Пользовательский загрузчик без поставщика контента

+0

любая причина не использовать 'ContentProvider'? и если вам это действительно нужно, см. источники «CursorLoader» ... – pskink

+0

@pskink просто не хочет, чтобы база данных была центральным репо, к которому также могли обращаться внешние приложения. Просто хочу, чтобы это было приватно для использования конкретного приложения. Поскольку вы не хотите, чтобы он был доступен другим приложениям, dats не хотите использовать contentprovider – user3819446

+0

, сделайте его «экспортировано» = false, тогда «android: exported: Доступен ли поставщик контента для других приложений для использования« – pskink

ответ

0

два варианта:

  1. Используйте ContentProvider и установить android:exported="false" для <provider> записи в вашем AndroidManifest.xml.
  2. Скопируйте source code for CursorLoader и модифицируйте его, чтобы оформить запрос SQLiteDatabase, вместо ContentResolver. Тогда вам нужно передать только ссылку на вашу базу данных.

Обратите внимание, что для того, чтобы загрузчик требовал, вам необходимо правильно выполнять уведомления об изменении данных при изменении данных в базе данных. Обычно это делается с использованием contentResolver.notifyChange() в URI. Для варианта 1 это должен быть URI, который вы дали CursorLoader; для варианта 2 вы можете вручную настроить ContentObserver в своем загрузчике и сделать одно и то же уведомление, или вы могли бы реализовать другой сигнал загрузчику для выдачи запроса.

+0

так что wud автоматически изменяет содержимое курсора при изменении содержимого в базе данных? – user3819446

+0

это то, что я предложил ОП, но все же вариант 2 имеет мало смысла, если вы можете просто использовать не экспортированный 'ContentProvider' – pskink

+0

@ user3819446, поэтому вы должны использовать' ContentProvider', я до сих пор не вижу причин создавать пользовательские 'Loader ' – pskink

Смежные вопросы