Я наблюдал за разговором о REST Google I/O и читал слайды: http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
Я все еще немного не понимаю, как красиво обрабатывать, скажем, ошибку обновления, удаленную удаленным сервером. Я реализовал собственный ContentProvider и SyncAdapter. Рассмотрим этот сценарий:
Обновить контактную информацию пользователя через вызов REST:
- Запросить обновление с помощью ContentResolver.
- Мой ContentProvider немедленно обновляет локальную базу данных Sqlite приложения и запрашивает синхронизацию (согласно рекомендациям в разговорах ввода-вывода Google).
- Вызывается My SyncAdapter.onPerformSync() и выполняет вызов REST для обновления удаленных данных.
- На удаленном сервере отвечает "ERROR: Invalid Phone Number" (например).
Мой вопрос: каким образом SyncAdapter лучше всего сигнализировать моему ContentProvider, что это изменение должно быть исправлено из локальной базы данных приложения, а также для сигнала моей активности, что запрос на обновление был неудачным ( и передать сообщения об ошибках, возвращенные с сервера)?
В моей активности нужно отобразить счетчик прогресса в ожидании результата и узнать, удалось ли выполнить запрос или не удалось.
Для обновления базы данных локального приложения с содержимым с Сервера шаблон SyncAdapter имеет для меня полный смысл, и у меня это нормально работает. Но для обновлений от приложения до сервера я не могу найти хороший способ справиться с описанным выше сценарием.
И еще одна вещь...;)
Скажем, я вызываю ContentResolver.notifyChange(uri, null, true); из моего метода contentProvider update(). true
вместе с android:supportsUploading="true"
вызовет вызов моего SyncAdapter onPerformSync(). Отлично, но внутри onPerformSync(), как я могу определить, какой URI я должен синхронизировать? Я не хочу просто обновлять всю свою БД каждый раз, когда я получаю запрос синхронизации. Но вы даже не можете передать Bundle в notifyChangeCall() для передачи onPerformSync().
Все примеры, которые я видел в onPerformSync(), были настолько простыми и не использовали пользовательский ContentProvider, какие-либо реальные примеры? И документы - это немного птичье гнездо. Вергилий Добжански, сэр, ты оставил меня за ручью без весла.