Cómo manejar la actualización RESTful del servidor remoto con SyncAdapter

Vi la charla REST de E / S de Google y leí las diapositivas:http: //www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.htm

Todavía no estoy claro cómo manejar bien, por ejemplo, un error de actualización lanzado por el servidor remoto. He implementado mi propio ContentProvider y SyncAdapter. Considere este escenario:

Actualice los detalles de contacto de un usuario a través de la llamada REST:

Solicite una actualización utilizando un ContentResolver.My ContentProviderinmediatament actualiza la base de datos Sqlite local de la aplicación y solicita una sincronización (según las recomendaciones de la charla de E / S de Google).My SyncAdapter.onPerformSync () se llama y realiza una llamada REST para actualizar los datos remotos.El servidor remoto responde con "ERROR: número de teléfono no válido" (por ejemplo).

Mi pregunta es, ¿cuál es la mejor manera para que el SyncAdapter le señale a mi ContentProvider que este cambio necesita ser retirado de la base de datos local de la aplicación, y también a mi Actividad que la solicitud de actualización falló (y pasa los mensajes de error devuelto del servidor)

Mi actividad debe mostrar una flecha de progreso mientras espera el resultado y saber si la solicitud se realizó correctamente o no.

Para actualizar la base de datos de la aplicación local con contenido del Servidor, el patrón SyncAdapter tiene mucho sentido para mí, y eso funciona bien. Pero para actualizacionesdesd la aplicación el servidor, parece que no puedo encontrar una buena manera de manejar el escenario anterior.

Y otra cosa... ;

Digo que llamo ContentResolver.notifyChange (uri, null, true); desde el método de actualización () de mi ContentProvider. @true junto conandroid:supportsUploading="true" hará que se llame a mi SyncAdapter's onPerformSync (). Genial, pero dentro de onPerformSync (), ¿cómo puedo saber qué URI debo sincronizar? No quiero simplemente actualizar mi base de datos completa cada vez que recibo una solicitud de sincronización. Pero ni siquiera puede pasar un paquete al notifyChangeCall () para pasarlo a onPerformSync ().

Todos los ejemplos que he visto de onPerformSync () han sido tan simples, y sin usar un ContentProvider personalizado, ¿hay ejemplos del mundo real? Y los documentos son un poco como un nido de pájaros. Virgil Dobjanschi, señor, me ha dejado en el arroyo sin remar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta