2010-08-20 2 views
3

Я смотрю видео 2010 I/O в этом разделе, и у меня есть несколько вопросов, чтобы убедиться, что я правильно понимаю.Модели баз данных и веб-сервисов

Google I/O 2010 - Android REST client applications

Пожалуйста, обратите внимание, у меня есть очень ограниченное понимание CursorAdapters

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

Я создал класс, который я вызываю DataBroker (расширяя ContentProvider), чтобы управлять извлечением данных из базы данных и вызова веб-служб для обновления данных.

Сценарии:

1) Предположим, я хочу, чтобы отобразить список элементов в моем ListActivity. Правильно ли я предполагаю, что я напишу функцию в своем DataBroker, которая создает курсор в таблице в моей базе данных, которая содержит эти элементы, запускает службу, которая запускает поток, который вызывает веб-службу для получения дополнительных элементов, а затем возвращает курсор к моей теме пользовательского интерфейса? Выполнение этого, скорее всего, вернет курсор в мой поток пользовательского интерфейса до окончания веб-службы, но, полагаю, после того, как CursorAdapter имеет курсор, он автоматически покажет любые изменения, внесенные в эту таблицу базы данных, да?

2) Теперь у меня есть список элементов в моем ListView. Предположим, я даю пользователю некоторые функции для удаления элемента. Пользователь выполняет эту функцию. Он должен вызывать функцию в моем DataBroker, которая обновляет строку в моей базе данных, соответствующую этому элементу, устанавливая столбец состояния STATE_DELETING (который удалит строку из ListView, потому что курсор имеет условие, исключая это состояние), а затем отключить служба, которая запускает поток, который попадает на мою веб-службу, после чего удаляет строку в базе данных?

Кроме того, предположим, что у меня есть несколько видов деятельности. Имею ли я статический курсор для каждой операции со списком, захватывая этот курсор в onCreate, а если этот курсор пуст, ударив мой DataBroker?

+0

Я полагаю, что попадание в базу данных также должно быть в службе. Так я должен иметь сервис (удаленная база данных), запускающая сервис (удаленный веб-сервис)? – Andrew

+0

Думаю, я больше склоняюсь к модели ContentProvider. Я мог бы действительно использовать учебник по этому поводу с некоторыми фрагментами кода, если кто-то знает об этом. – Andrew

ответ

1

Поскольку никто не ответил, я буду отвечать, что я сделал (и, кажется, работает)

Следует отметить, что я переименовал DataBroker. Мой ContentProvider теперь вызывается другим именем, и теперь у меня есть расширенная служба, которую я назвал DataBroker.

1) Я не выполняю свой запрос курсора внутри Сервиса. Я вызываю курсор в Activity, а затем вызываю службу (DataBroker) для запроса веб-службы для новых данных. Если новые данные будут найдены, DataBroker будет транслировать сообщение, полученное любым прослушиванием активности, и затем Activity затем запросит курсор.

2) Я передаю с помощью намерения идентификатор строки, требуемой для удаления в службу (DataBroker). Служба отмечает столбец статуса для этого идентификатора как STATE_DELETING, использует веб-службу, чтобы мой сервер знал, что строка была удалена, и, если это подтверждено сервером, затем удаляет строку из моей базы данных. Кроме того, после того, как строка была отмечена STATE_DELETING, я транслирую сообщение, на которое могут подписаться любые заинтересованные действия, позволяющие им знать, что я сделал это. Таким образом, Activity может повторно запросить свой Cursor (который не возвращает строки STATE_DELETING).

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