Как обрабатывать вызовы REST, сохранение данных, синхронизацию и наблюдение за ContentProvider

Я знаю, что этот вопрос задавали слишком много раз, но я думаю, что проблемы, которые я пытаюсь решить, немного отличаются, может быть, более сложными.

Я собираюсь разработать приложение, которое использует RESTful Web Serviceи должно отвечать следующим требованиям:

  • приложение должно отображать некоторые книги, их авторов и редакторов в списках и подробно

  • приложение также должно позволять искать книгу

  • книги, авторы и редакторы загружаются из веб-службы RESTful

  • каждый объект должен кэшироваться, чтобы при открытии действия я сначала видел старые данные ( если есть), а новый обновляется из сети.

  • каждый раз, когда объект обновляется, заинтересованные стороны должны быть уведомлены (ContentObserver? Обычная реализация Listener?)

  • если вызов уже выполняется (скажем, api/books/1337или api/editors) вызывающая сторона должна быть уведомлена о том, что она загружает данные, и должна быть предоставлена ​​старая (если она существует), как если бы это была оригинальный звонилка.

  • некоторые данные (только книги и авторы) должны обновляться каждые N минут (определяется пользователем) и должны быть уведомлены наблюдатели ( SyncAdapter?)

Вопросы:

После просмотра и изучения всех компонентов , предложенных Вирджилом Добьянски на Google I/O 2010, у меня возникли сомнения:

  1. Как я могу прозрачно обрабатывать « сущность-это-обновлениеконцепция для любого звонящего? Должен ли я использовать ContentObserverв ContentProvider, который мне придется реализовать?

  2. Если я используюContentObserver , я могу легко установить флаг состояния для отдельного объекта (как предложил Добьянски), например, UPDATING, INSERTING, и так далее. Но как мне обрабатывать список? Скажем, мне нужен список книг, куда мне поставить флаг статуса? Должен ли я поместить его в таблицу состояния только для списков? Если это так, я должен наблюдатьдва Cursor, один для статуса и один для фактического списка (т. е. URI таблицы/контента).А что, если объект, который я запрашиваю, не существует (пока) или вызов REST возвращает 404? Как обработать обратный вызов?

  3. Если я помещу все свои методы REST в **SyncAdapter**, смогу ли я «заставить» SyncAdapterобновлять список объектов/сущностей из сети (и поэтому поместите его в соответствующую таблицу)? Таким образом, флаг состояния был бы полезен.

  4. Может ли SyncAdapterработать с несколькими сущностями(на самом деле, со списками сущностей, так как я хочу время от времени обновлять книги и редакторы), поскольку он имеет только метод выполнения синхронизации ?

  5. Если моя реализация SyncAdapterбыла отключена пользователем в настройках устройства, она ничего не обновит (и это нормально). Но если пользователь нажимает кнопку «обновить книги» в действии, могу ли я по-прежнему вызывать метод PerformSyncили он также будет отключен?

6
задан frapontillo 22 June 2012 в 16:22
поделиться