Couchbase%20Server v5.5 red Sync%20Gateway v2.1 red Couchbase%20Lite v2.1 red

Introducción

Zebra Technologies™ es líder mundial en impresión de códigos de barras, informática móvil, captura de datos y capacidades relacionadas. Zebra ofrece una línea completa de ordenadores de mano robustos con escáneres de códigos de barras integrados. Estos dispositivos basados en Android tienen una amplia gama de aplicaciones, incluyendo el seguimiento de la entrega, la venta asistida, y la gestión de activos, por nombrar algunos.

Muchas de estas aplicaciones encajan perfectamente con el Couchbase Móvil que suministra la plataforma de datos de respaldo. Dado que Couchbase Lite es una verdadera base de datos NoSQL de pleno derecho, tienes el rendimiento de los datos en el dispositivo combinado con una fácil sincronización fuera del dispositivo.

Para demostrar un caso de uso, hemos creado una aplicación de escaneado de inventario de muestra.

Screenshot

Captura de pantalla

Los datos consisten en información sobre un conjunto ficticio de libros. El escaneado de los códigos de barras ISBN extrae la información del Couchbase Lite base de datos integrada. Se basa en la Zebra DataWedge servicio de lectura de códigos de barras ISBN.

La aplicación completa, junto con datos de muestra, está disponible en GitHub aquí. Este post examinará el código. Para ver la demo en acción y obtener más información sobre Zebra y Couchbase, vea este seminario web de Zebra DEVTALK.

Visión general

La aplicación consiste en una única Actividad. Couchbase Lite se integra como una librería en el proyecto. La aplicación se instala sin ningún dato. Almacenamos los datos de inventario en Couchbase Server. Los datos del dispositivo se rellenarán en tiempo de ejecución utilizando una replicación bidireccional.

DataWedge se ejecuta como un componente independiente en el dispositivo. La API se basa completamente en Intents. Activamos el escaneo emitiendo una intención, y los datos vuelven a través de una. Para ello, asocias un perfil DataWedge a tu aplicación. (De este modo, DataWedge puede, entre otras cosas, dirigirse específicamente a la aplicación cuando devuelve un resultado).

El código (aparte del trabajo de interfaz de usuario) consiste en configurar la base de datos, iniciar una replicación y añadir un botón de activación de escaneado. Cuando se obtiene el resultado del escaneo (recordemos que se trata de un ISBN), la aplicación consulta la base de datos para obtener los detalles del libro y los muestra. (Como nota al margen, utilizamos RxJava para manejar multi-threading).

El perfil DataWedge de Zebra

DataWedge hace un uso elegante del sistema Android Intent. Para ello es necesario configurar un perfil. Estas capturas de pantalla muestran las opciones utilizadas aquí.

Enable Scanning

Activar la exploración

Enable Intents

Habilitar intenciones

Fíjese en particular en el ajuste "Intent action". Necesitaremos la misma cadena en la propia aplicación.

Inicialización de la base de datos e inicio de la replicación

Para que la aplicación sea compacta, inicializamos la base de datos en el directorio onCreate en el método EscanearActividad clase. También configuramos allí la replicación.

Todo esto es muy sencillo. El punto final es la dirección de nuestra instancia de Sync Gateway. Establecer la replicación en continuo hace que Couchbase actualice constantemente la base de datos en segundo plano.

Botón de exploración suave

Los dispositivos Zebra disponen de hardware dedicado para activar el escaneado. Hemos añadido un botón en la interfaz de usuario para hacerlo también. La llamada de retorno para los clics del botón muestra cómo utilizar la API basada en la intención de DataWedge. Sólo tienes que rellenar la intención con algunas cadenas clave, y dejar que Android se encargue del resto.

Recepción de los resultados de la exploración

Una vez activado, el escáner se ilumina y captura los datos en segundo plano. Si tiene éxito, se devuelve la información del código de barras, también mediante una intent.

Configuramos DataWedge para entregar la intención utilizando startActivity. Aquí es donde el Acción intencionada del perfil. Establecemos un filtro de intención en nuestro manifiesto de Android para que coincida con la cadena de ese ajuste.

Por defecto, esto crearía normalmente una nueva instancia de la actividad correspondiente. En este caso, sólo queremos mantener la misma actividad y dejar que procese el resultado. Para ello, establecemos el modo de lanzamiento de la actividad en singleTop.

Esto significa que la intención se entregará a través del onNewIntent método. Esto no afecta a la intención original que inició la actividad en primer lugar. Utilizamos un patrón común para restablecer la intención de la actividad a la nueva en onNewIntenty luego procesarlo en onResume.

Configuración de la consulta

En onResumecomprobamos que la intención coincide con lo que esperábamos. A continuación, extraemos el número ISBN y realizamos la consulta.

Couchbase Lite utiliza una interfaz de estilo constructor para crear consultas. La API está diseñada para mapear directamente una sentencia SQL. Aquí, el equivalente SQL sería SELECT * FROM inventario WHERE isbn = "";donde <scan result>representa la cadena que se nos devuelve.

Eso se traduce en este código.

Esta capacidad de consulta dinámica se añadió en Couchbase Lite 2.0. Se basa en el lenguaje de consulta N1QL de Couchbase, que es un superconjunto de SQL. Para una introducción más profunda a las consultas en Couchbase Lite, recomiendo leer esta entrada del blog.

Ejecución de consultas y resultados

Con el objeto de consulta en la mano, lo ejecutamos y recuperamos los resultados en forma de lista. Esperamos que cada ISBN corresponda a un único libro. Si el resultado es correcto, mostramos una miniatura de la cubierta del libro y otra información. Si falta el libro u obtenemos más de un resultado, mostramos un error en lugar de la portada del libro. Este código está envuelto usando RxJava para que la consulta se ejecute en un hilo en segundo plano.

Recuperamos todo el contenido del documento como un objeto Diccionario. (Los diccionarios son estructuras de datos inmutables con semántica map definida por Couchbase Lite). Necesitamos convertir la imagen de la portada del libro, adjunta como un blob, en un bitmap. Por comodidad, convertimos el diccionario en un mapa, creamos el mapa de bits y lo añadimos al mapa. Esto se pasa al código de la interfaz de usuario.

Conclusión

El repositorio de GitHub para este proyecto tiene todos los extras necesarios para ejecutarlo. Hay un archivo de configuración de Sync Gateway, configurado para hablar con una instancia local de Couchbase Server. También puedes encontrar un PDF con algunos ejemplos de códigos de barras.

Para obtener más información sobre la integración del escaneado de códigos de barras en su aplicación, visite https://developer.zebra.com.

Posdata

Couchbase es de código abierto y probar gratis.
Empezar con código de ejemplo, consultas de ejemplo, tutoriales y mucho más.
Más recursos en nuestra portal para desarrolladores.
Síguenos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros.
Participamos activamente en Stack Overflow.
Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley

Autor

Publicado por Hod Greeley, Defensor del Desarrollador, Couchbase

Hod Greeley es desarrollador de Couchbase y vive en Silicon Valley. Tiene más de dos décadas de experiencia como ingeniero de software y director de ingeniería. Ha trabajado en una variedad de campos de software, incluyendo física computacional y química, seguridad informática y de redes, finanzas y móviles. Antes de unirse a Couchbase en 2016, Hod dirigió las relaciones con desarrolladores para móviles en Samsung. Hod es doctor en física química por la Universidad de Columbia.

Dejar una respuesta