Я знаю, что этот вопрос задавался слишком много раз, но я думаю, что проблемы, которые я пытаюсь решить, немного отличаются, может быть, более сложными.
Я собираюсь разработать приложение, которое использует веб-службу RESTful и должно соответствовать следующим требованиям:
приложение должно показывать некоторые книги, их авторов и их редакторов в списках и подробно
приложение также должно позволять искать книгу
книги, авторы и редакторы извлекаются из веб-службы RESTful
каждый объект должен быть кэширован, чтобы при открытии действия я сначала видел старые данные (если они есть), а новые обновляются из сети.
каждый раз, когда объект обновляется, заинтересованные стороны должны быть уведомлены (
ContentObserver
? ОбычнаяListener
реализация?)если вызов уже выполняется (скажем, к
api/books/1337
или кapi/editors
), вызывающая сторона должна быть уведомлена о том, что она загружает данные, и должна быть передана старая (если она существует), как если бы это была исходная вызывающая сторона.некоторые данные (только книги и авторы) должны обновляться каждые N минут (определяется пользователем) и должны быть уведомлены наблюдатели (
SyncAdapter
?)
Вопросы:
После просмотра и изучения всех компонентов, предложенных Вирджилом. Добьянски на Google I/O 2010 вот мои сомнения:
Как я могу прозрачно обрабатывать концепцию «обновляемая сущность» для любого вызывающего объекта? Должен ли я использовать
ContentObserver
вContentProvider
, который мне придется реализовать?Если я использую
ContentObserver
, я могу легко установить флаг состояния для одного объекта (как предложил Добьянски), например,UPDATING
,INSERTING
и т. д. Но как мне обрабатывать список? Скажем, мне нужен список книг, куда мне поставить флаг статуса? Должен ли я поместить его в таблицу состояния только для списков? Если это так, я должен соблюдать дваCursor
, один для статуса и один для фактического списка (т. е. URI таблицы/контента). А что, если объект, который я запрашиваю, не существует (пока) или вызов REST возвращает404
? Как обработать обратный вызов?Если я помещу все свои методы REST в
**SyncAdapter**
, могу ли я «заставить»SyncAdapter
обновить список объектов/сущностей из сети (и, следовательно, поместить его в соответствующую таблицу)? Таким образом, флаг состояния был бы полезен.Может ли
SyncAdapter
работать с несколькими сущностями (на самом деле, со списками сущностей, так как я хочу время от времени обновлять книги и редакторы), поскольку у него есть только методperformSync
?Если моя реализация
SyncAdapter
была отключена пользователем в настройках устройства, она ничего не обновит (и это нормально). Но если пользователь нажимает кнопку «обновить книги» в действии, могу ли я по-прежнему вызывать методperformSync
или он также будет отключен?