Este blog de varias partes te ayudará a construir una aplicación móvil de extremo a extremo utilizando las características líderes de la industria de Couchbase Lite. Las aplicaciones de extremo a extremo, escalables y de grado de producción incluyen las siguientes características:
-
- Una base de datos integrada: almacenar los datos localmente reduce los viajes por la red a una base de datos centralizada para cada actividad en el dispositivo. Esto contribuye en gran medida a mejorar la experiencia del usuario.
- Sincronización con otros dispositivos móviles pares y con un servidor centralizado.
- Capacidades analíticas avanzadas, búsqueda de texto completo y aprendizaje automático en el dispositivo.
Como hay mucho que tratar, hemos dividido este proyecto en tres partes. La Parte 1 muestra el proceso de creación de una aplicación móvil que aprovecha Couchbase Lite y lo utiliza como base de datos integrada para almacenar datos. La parte 2 (este post) muestra cómo ejecutar la búsqueda de texto completo (FTS) en el dispositivo. Y la parte 3 mostrará el proceso de sincronización de los datos con pares y un servidor Couchbase centralizado.
¿Qué es Couchbase Mobile?
Couchbase es una galardonada base de datos distribuida NoSQL en la nube. Ofrece una versatilidad, un rendimiento, una escalabilidad y un valor financiero inigualables en implementaciones en la nube, locales, híbridas, en la nube distribuida y de computación perimetral.
Los despliegues móviles/de vanguardia son una parte esencial del ecosistema digital que Couchbase Mobile aborda. Couchbase Móvil incluye:
-
- Base de datos Couchbase Lite integrada para dispositivos periféricos
- Pasarela de sincronización de alto rendimiento para la sincronización entre pares y con servidores centralizados
- Los centros de datos de borde basados en Couchbase Server se pueden desplegar en la nube, on-prem o en centros de datos de borde locales.
Visión general de la aplicación móvil
El código de esta aplicación de demostración está disponible en mi Repositorio GitHub de Couchbase Mobile. Descargar el archivo Rateit.zip y extrae los archivos a tu carpeta local.
También puedes seguir las instrucciones de este blog para crear la aplicación desde cero.
Las funciones de la aplicación se dividen en tres partes
-
- Enviar solicitudes de valoración
- Recibir solicitudes de clasificación de otros
- Ver la solicitud calificada devuelta por otros
Para conocer mejor los distintos componentes de la aplicación, consulte parte 1, donde enviamos/recibimos las solicitudes de clasificación.
Añadir búsqueda de texto completo
En este ejemplo, añadimos un simple busque en y el código para añadir un índice invertido (utilizado por los sistemas de búsqueda) que toma la entrada del usuario y muestra los resultados relevantes.
Primeros pasos: Revise la documentación de CBLite
Por favor, revise el documentación para entender los distintos componentes de una aplicación de base de datos Couchbase Lite. Creo una nueva base de datos para esta aplicación cuando la aplicación es invocada por primera vez. Alternativamente, la aplicación también puede utilizar una base de datos pre-construida.
Los pasos para integrar la base de datos se encuentran en la sección Documentación de Couchbase Lite. Repasa cada una de las secciones para aprender a:
-
- crear y abrir una base de datos
- escribir un documento en la base de datos incrustada
- escribir consultas para recuperar el documento
- caducar o suprimir un documento
- crear índices de búsqueda de texto completo
- realizar una expresión de búsqueda FTS
- crear una consulta que incorpore la expresión de búsqueda
Requisitos previos para la creación de aplicaciones
Esta aplicación se ha creado para dispositivos Android con los siguientes requisitos previos de software y hardware que debes tener en cuenta:
-
- Es necesario comprender los fundamentos de la creación de aplicaciones con Android Studio y la programación en Java.
- Esta aplicación de demostración y las capturas de pantalla relacionadas proceden de la creación de la aplicación en un ordenador macOS.
- Utilizamos (de libre acceso) Android Studio 2020.3 para crear aplicaciones móviles para dispositivos Android.
- Se utiliza la versión 3.0.0-beta02 de Couchbase Lite. Las bibliotecas necesarias estarán integradas en el código y no será necesario descargar el software manualmente en el escritorio.
Comprender el diseño
Los archivos de diseño son archivos XML que describen la pantalla de la aplicación móvil. Por ejemplo, activity_main.xml tiene el ENVIAR A, MENSAJE, ASUNTO además de los dos listviews que muestran las solicitudes recibidas y entrantes.
También define qué función invocar cuando la función HAGA CLIC PARA ENVIAR UNA SOLICITUD DE VALORACIÓN, SOLICITUDES DE CALIFICACIÓN RECIBIDAS y SOLICITUDES DE CALIFICACIÓN RECIBIDAS se pulsan los botones. El código XML puede escribirse manualmente o autogenerarse estableciendo los atributos en el campo atributos del diseñador. Aquí, añadimos una entrada de búsqueda en el centro del diseño:
Revisar el código
Hay un archivo de código que actualizamos para añadir la lógica de búsqueda a la aplicación, Mainactivity.java.
Localice Mainactivity.java bajo el java -> com.example.rateit y pegue el siguiente código dentro de la clase Actividad principal. El nuevo código se añade al ejemplo anterior de la parte 1: se encuentra en la línea 8 y en las líneas 12-27 siguientes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
público void receivedata( Ver ver ) lanza CouchbaseLiteException { Contexto contexto = este; CouchbaseLite.init(contexto); userArray.borrar(); Configuración de la base de datos config = nuevo Configuración de la base de datos(); config.setDirectory(contexto.getFilesDir().getAbsolutePath()); Base de datos base de datos = null; Archivo dbFile = nuevo Archivo(contexto.getFilesDir(), "rateitdb"); pruebe { base de datos = nuevo Base de datos("rateitdb", config); } captura (CouchbaseLiteException e) { e.printStackTrace(); } si (!dbFile.existe()) { base de datos.createIndex("descFTSIndex", IndexBuilder.fullTextIndex(FullTextIndexItem.propiedad("URL"))); } BuscarVer busque en = (BuscarVer) findViewById(R.id.buscarVer); Expresión buscarExp = ExpresiónTextoCompleto.índice("descFTSIndex").match(Cadena.valueOf(busque en.getQuery())) ; Consulta consulta = null; si (busque en.getQuery().toString().recortar().isEmpty()) { consulta = (Consulta) Constructor de consultas.seleccione(SeleccionarResultado.todos()).de(Fuente de datos.base de datos(base de datos)) .donde(Expresión.propiedad("a").equalTo(Expresión.cadena("rangana")) .y(Expresión.propiedad("tipo").equalTo(Expresión.cadena("recibido")))); } si no { consulta = (Consulta) Constructor de consultas.seleccione(SeleccionarResultado.todos()).de(Fuente de datos.base de datos(base de datos)) .donde(Expresión.propiedad("a").equalTo(Expresión.cadena("rangana")) .y(Expresión.propiedad("tipo").equalTo(Expresión.cadena("recibido"))) .y(buscarExp)); } int numrows = consulta.ejecutar().todosResultados().talla(); Tostadas.makeText(getApplicationContext(), "número de filas:::"+ numrows , Tostadas.LENGTH_LONG).Mostrar(); pruebe { consulta.ejecutar().todosResultados().paraCada(resultado -> { Diccionario thisDocsProps = resultado.getDictionary(0); Cadena enviar a = thisDocsProps.getString("sendto").recortar(); Cadena URL = thisDocsProps.getString("URL").recortar(); Cadena valoración = thisDocsProps.getString("rating").recortar(); float ratingstars = thisDocsProps.getFloat("ratingstars"); int estrellas = (int) ratingstars; valoración = Cadena.valueOf(thisDocsProps.getFloat("ratingstars")); userArray.añada(nuevo Usuario(enviar a, URL, valoración,ratingstars)); }); } captura (CouchbaseLiteException e) { e.printStackTrace(); } userAdapter = nuevo UserCustomAdapter(Actividad principal.este, R.diseño.diseño personalizado, userArray); userList = (ListView) findViewById(R.id.listView); userList.setItemsCanFocus(falso); userList.setAdapter(userAdapter); userList.setOnItemClickListener(nuevo OnItemClickListener() { @Override público void onItemClick(AdaptadorVer<?> padre, Ver v, final int posición, largo id) { Registro.i("Vista de lista pulsada", "**********"); Tostadas.makeText(Actividad principal.este, "Vista de lista pulsada:" + posición, Tostadas.LENGTH_LONG).Mostrar(); } }); base de datos.cerrar(); } |
En receivedata se activan cuando SOLICITUDES DE CALIFICACIÓN RECIBIDAS se pulsa. Muestra todas las solicitudes de calificación recibidas ejecutando una consulta contra la base de datos local para obtener los registros.
Te permite poner una valoración y crea un registro JSON con la valoración. Cuando la TARIFA se vuelve a escribir la solicitud en la base de datos con un tipo de documento de clasificado. Si el BORRAR el registro se elimina estableciendo el tiempo de vida del documento (TTL).
Las nuevas secciones del código funcionan del siguiente modo:
-
- En primer lugar, añadimos un índice FTS si el archivo de base de datos no existe, lo que indica la primera entrada en la aplicación.
- Construir la expresión de búsqueda si el usuario introduce una cadena de búsqueda
- Construye la consulta utilizando la expresión de búsqueda y ejecútala
Cableado del trazado
Es necesario añadir el siguiente código a activity_main.xml. Añade el botón de búsqueda y su etiqueta:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<Vista de búsqueda android:id="@+id/searchView" android:ancho_disposición="226dp" android:altura_disposición="40dp" android:layout_marginStart="4dp" android:layout_marginEnd="8dp" android:layout_marginBottom="4dp" android:fondo="@color/blanco" aplicación:layout_constraintBottom_toTopOf="@+id/listView" aplicación:layout_constraintEnd_toEndOf="padre" aplicación:layout_constraintStart_toEndOf="@+id/textView4" aplicación:layout_constraintTop_toBottomOf="@+id/Recibido" /> <VistaTexto android:id="@+id/textView4" android:ancho_disposición="158dp" android:altura_disposición="38dp" android:layout_marginStart="10dp" android:layout_marginBottom="4dp" android:fondo="#7BE67F" android:backgroundTint="#7BE67F" android:fontFamily="sans-serif-negro" android:gravedad="centro" android:texto="Buscar texto" android:textAllCaps="true" android:textStyle="negrita" aplicación:layout_constraintBottom_toTopOf="@+id/listView" aplicación:layout_constraintStart_toStartOf="padre" aplicación:layout_constraintTop_toBottomOf="@+id/Recibido" /> |
Compilar el código
Una vez actualizado todo el código, haga clic en Construir → Reconstruir proyecto. Cuando lo consiga, pulse Construir → Ejecutar.
Se te pedirá que elijas el emulador la primera vez que ejecutes la aplicación, por ejemplo, selecciona el NEXUS 5X API 25 como hice yo. Una vez completada la ejecución, la página principal tendrá este aspecto:
Ahora ha desplegado con éxito el código en el emulador de su elección. Cuando el usuario introduce una parte de la cadena URL, se muestran los resultados correspondientes.
Próximos pasos
Esta es la segunda parte de la serie de blogs, Creación de una aplicación móvil con Couchbaseque se centra en una solución móvil completa de extremo a extremo. La primera parte mostraba cómo crear una app que utiliza una base de datos Couchbase Lite incrustada para almacenar, recuperar y eliminar documentos almacenados localmente en el dispositivo.
La segunda parte añadió la posibilidad de realizar búsquedas basadas en texto, y la tercera y última parte de esta serie añadirá la sincronización entre pares y la sincronización con una base de datos centralizada.
Entre los principales recursos a los que se hace referencia en este post figuran:
- Parte 1 - Creación de una aplicación móvil con Couchbase
- Repositorio de GitHub: incluye el código del proyecto de la aplicación Rateit.
- Couchbase Mobile - información sobre el producto
- Documentación de Couchbase Lite
- Android Studio