¿Cómo implementar una arquitectura REST y ContentProvider simple usando Modelos?

Actualmente estoy desarrollando una aplicación de Android que interactúa con un servicio web RESTful. El cliente puede realizar CRUD completo en el servicio web. Después de buscar las mejores prácticas, vi la nota clave de Google I / O 2010 sobre los clientes REST que se cita en casi todos los artículos.

Para usar la mayor cantidad posible de la plataforma de Android, decidí usar la Opción B usando a ContentProvidery a SyncAdapter. Esto me proporcionó el sistema de cuenta incorporado, los observadores de contenido y las sincronizaciones periódicas cuando Internet está disponible.

Debido a que una característica muy importante de nuestra aplicación es la edición y disponibilidad fuera de línea (se usa en entornos con mala recepción), queremos mantener la mayor cantidad de datos relevantes localmente posible.

El cliente se comunica con el servidor usando una API RESTful en Json , los datos del servidor se deserializan usando Gson en Modelos (POJO, Objetos Java simples y sencillos ).

Para mantener el código claro y fácil de leer, intenté construir mi propio mapeador de objetos en lugar de usar un Cursordirectamente. Este asignador proporciona operaciones CRUD predeterminadas y asigna cursores a modelos al leer datos y modelos a valores de contenido al escribir datos.

Sin embargo, esta arquitectura se siente muy hinchada.

  • En primer lugar, no es posible obtener información confiable sobre la corriente SyncState(para proporcionar comentarios al usuario). (Ahora "hackeado" usando esta respuesta SO)

  • El segundo problema es que para cada recurso necesitaré: un modelo, un mapeador, una definición de tabla y URI de ContentProvider . Que es mucho código para administrar para un solo recurso.

  • El tercer problema es que al requerir Modelos a través de mi mapeador, me bloqueé el uso de a CursorLoaderen las Actividades.

Línea de fondo

Busco un mantenible y ligera manera de tener el contenido sin conexión y sincronización con un servicio web REST utilizando JSON . También me gustaría poder usar Modelos en mi código porque user.getName()es mucho más amigable para los desarrolladores que cursor.getString(cursor.getColumnIndex(UserDataSource.COLUMN_NAME));(que actualmente está oculto en mi clase Mapper).

Un buen ejemplo de mapeo sería Dapper combinado con Dapper Extensions escritas para .NET pero similar a mi enfoque, sin embargo, mi enfoque requería que todas las columnas y campos se definieran en muchos archivos diferentes (ver arriba).

Además, estoy considerando eliminarlo ContentProviderde mi código porque se siente muy hinchado y obsoleto para una tarea tan simple.

Respuesta 1

Tengo una biblioteca de clases que contiene aproximadamente 10 dll escritas en C # 3.0 / .NET 3.5. La biblioteca proporciona acceso API a mi producto que ejecuta un servidor remoto. La comunicación se realiza mediante sockets TCP. YO ...

En el código: HttpURLConnection connection = (HttpURLConnection) createMerchURL.openConnection (); connection.setRequestMethod ("PUT"); connection.addRequestProperty ("Nombre", "Valor1"); conexión....

¿Podría alguien explicar este problema ... ¿Por qué: Cadena de letras [] = {"A", "B", "C"}; ArrayList <String> list = new ArrayList <String> (3); para (int i = 2; i> = 0; i--) list.set (i, ...

Estoy usando una biblioteca de emulador de terminal para crear un terminal y luego lo uso para enviar los datos ingresados ​​en serie a un dispositivo en serie. La biblioteca se puede ver aquí. Cuando ingreso datos en el ...