Рекомендации по подключению таблиц и уведомление ContentObservers в Android ContentProvider

У меня есть ContentProvider, который обрабатывает все вставки и извлечения данных, связанные с моим приложением, я следую шаблону, предложенному Вирджилом Добжански в Google I/O. Я использую первый шаблон.

Моя проблема в том, что у меня есть логическая сущность, которая была представлена ​​несколькими таблицами в базе данных.

Например, у меня есть таблица статей и таблица ArticleExtras. Статьи представляют собой самую статью, а ArticleExtras представляет дополнительную информацию об определенной статье, например, количество комментариев.

Я использовал CursorAdapter в пользовательском интерфейсе, чтобы отобразить заголовок статьи и количество комментариев этой статьи в одной строке ListView.

Чтобы реализовать это, я добавил инструкцию left outer join ArticleExtras on в свой метод запроса ContentProvider для таблицы статей, чтобы CursorAdapter мог получить ArticleExtras вместе с самой статьей.

Когда новые статьи извлекаются из Интернета, я вставляю их в базу данных через ContentProvider, а затем CursorAdapter получает уведомление и обновляет пользовательский интерфейс, эта часть работала, как ожидалось.

Но когда я получил количество комментариев (ArticleExtras), я хочу, чтобы тот же CursorAdapter, который следит за изменениями в content://com.myapp.content/Articles, также должен быть уведомлен, поэтому я могу обновить свою строку в ListView.

Моя текущая реализация такова: после вставки в базу данных ArticleExtras, я запускаю новый запрос, чтобы проверить, есть ли в таблице статей таблицы, которые связаны с только что вставленными статьями ArticleExtras. Если это так, я сделаю новый uri для этой статьи (например: content://com.myapp.cotent/Articles/123) и вызовет getContext().getContentResolver().notifyChange(uri, null), поэтому будет уведомлен соответствующий CursorAdapter, который следит за изменениями этой статьи.

Правилен ли подход, или есть лучший способ реализовать то, что я хочу?

Ответы

Ответ 1

Оформить заказ ContactsProvider2, в нем они устанавливают uri уведомлений на AUTHORITY_URI, который выглядит как catch для других URI в провайдере. У меня был такой же пробный номер, и я сам пробовал это для провайдера с несколькими таблицами и присоединяется к этим таблицам, и он отлично работает.