Я знаю, что этот вопрос задавали слишком много раз, но я думаю, что проблемы, которые я пытаюсь решить, немного отличаются, может быть, более сложными.
Я собираюсь разработать приложение, которое использует RESTful Web Serviceи должно отвечать следующим требованиям:
приложение должно отображать некоторые книги, их авторов и редакторов в списках и подробно
приложение также должно позволять искать книгу
книги, авторы и редакторы загружаются из веб-службы 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
работать с несколькими сущностями(на самом деле, со списками сущностей, так как я хочу время от времени обновлять книги и редакторы), поскольку он имеет только метод выполнения синхронизации
?
Если моя реализация SyncAdapter
была отключена пользователем в настройках устройства, она ничего не обновит (и это нормально). Но если пользователь нажимает кнопку «обновить книги» в действии, могу ли я по-прежнему вызывать метод PerformSync
или он также будет отключен?