Este blog com várias partes o ajudará a criar um aplicativo móvel de ponta a ponta usando os recursos líderes do setor do Couchbase Lite. Os aplicativos de ponta a ponta, escalonáveis e de nível de produção incluem os seguintes recursos:
-
- Um banco de dados incorporado - o armazenamento de dados localmente reduz as viagens de rede para um banco de dados centralizado para cada atividade no dispositivo. Isso contribui muito para melhorar a experiência do usuário.
- Sincronização com outros dispositivos móveis pares e com um servidor centralizado.
- Recursos analíticos avançados, pesquisa de texto completo e aprendizado de máquina no dispositivo.
Como há muito a ser abordado, dividimos este projeto em três partes. A Parte 1 apresenta o processo de criação de um aplicativo móvel que aproveita o Couchbase Lite e o utiliza como um banco de dados incorporado para armazenar dados. A Parte 2 (esta postagem) mostra como executar o Full-Text Search (FTS) no dispositivo. E a parte 3 mostrará o processo de sincronização dos dados com pares e um servidor Couchbase centralizado.
O que é o Couchbase Mobile?
O Couchbase é um banco de dados em nuvem NoSQL distribuído e premiado. Ele oferece versatilidade, desempenho, escalabilidade e valor financeiro inigualáveis em implantações na nuvem, no local, híbridas, distribuídas e de computação de borda.
As implantações móveis/edge são uma parte essencial do ecossistema digital que o Couchbase Mobile atende. Couchbase Mobile Inclui:
-
- Banco de dados Couchbase Lite incorporado para dispositivos de borda
- Sync Gateway de alto desempenho para sincronização ponto a ponto e sincronização centralizada de servidores
- Os data centers de borda alimentados pelo Couchbase Server podem ser implantados na nuvem, no local ou em data centers de borda locais.
Visão geral do aplicativo móvel
O código para esse aplicativo de demonstração está disponível em meu Repositório do GitHub do Couchbase Mobile. Faça o download do arquivo Rateit.zip e extraia os arquivos para sua pasta local.
Como alternativa, você pode seguir as instruções deste blog para criar o aplicativo do zero.
A funcionalidade do aplicativo é dividida em três partes
-
- Enviar solicitações de classificação
- Receber solicitações de classificação de outras pessoas
- Visualizar a solicitação classificada retornada por outros
Para obter uma compreensão mais profunda dos vários componentes do aplicativo, consulte Parte 1, onde enviamos/recebemos solicitações de classificação.
Adição de pesquisa de texto completo
Neste exemplo, adicionamos um simples pesquisa e o código para adicionar um índice invertido (usado por sistemas de pesquisa) que recebe a entrada do usuário e exibe resultados relevantes.
Primeiros passos: Revisar a documentação do CBLite
Consulte o documentação para entender os vários componentes de um aplicativo de banco de dados Couchbase Lite. Eu crio um banco de dados totalmente novo para esse aplicativo quando ele é chamado pela primeira vez. Como alternativa, o aplicativo também pode usar um banco de dados pré-criado.
As etapas para incorporar o banco de dados podem ser encontradas na seção Documentação do Couchbase Lite. Revise cada uma das seções para aprender a:
-
- criar e abrir um banco de dados
- gravar um documento no banco de dados incorporado
- escrever consultas para recuperar o documento
- expirar ou excluir um documento
- criar índices de pesquisa de texto completo
- criar uma expressão de pesquisa FTS
- criar uma consulta que incorpore a expressão de pesquisa
Pré-requisitos para a criação de aplicativos
Este aplicativo foi desenvolvido para dispositivos Android usando os seguintes pré-requisitos de software e hardware que você precisa conhecer:
-
- Você precisa entender os fundamentos da criação de aplicativos com o Android Studio e da programação em Java.
- Este aplicativo de demonstração e as capturas de tela relacionadas são provenientes da criação do aplicativo em um computador macOS.
- Usamos (disponível gratuitamente) Android Studio 2020.3 para criar aplicativos móveis para dispositivos Android.
- É usada a versão 3.0.0-beta02 do Couchbase Lite. As bibliotecas necessárias serão incorporadas ao código e não há necessidade de fazer download do software manualmente em seu desktop.
Compreensão do layout
Os arquivos de layout são arquivos XML que descrevem a tela do aplicativo móvel. Por exemplo, activity_main.xml tem o ENVIAR PARA, MENSAGEM, ASSUNTO além das duas visualizações de lista que mostram as solicitações recebidas e as recebidas.
Ele também define a função a ser invocada quando o CLIQUE PARA ENVIAR SOLICITAÇÃO DE CLASSIFICAÇÃO, SOLICITAÇÕES DE CLASSIFICAÇÃO RECEBIDAS e SOLICITAÇÕES DE CLASSIFICAÇÃO RECEBIDAS são pressionados. O código XML pode ser escrito manualmente ou gerado automaticamente, definindo os atributos na variável atributos seção do designer. Aqui, adicionamos uma entrada de pesquisa ao centro do layout:
Revisão do código
Há um arquivo de código que atualizamos para adicionar a lógica de pesquisa ao aplicativo, Mainactivity.java.
Localizar Mainactivity.java sob o java -> com.example.rateit e cole o seguinte código dentro da classe Atividade principal. O novo código é adicionado ao exemplo anterior na parte 1 - ele é encontrado na linha 8 e nas linhas 12-27 abaixo:
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 vazio dados recebidos( Ver visualização ) lançamentos CouchbaseLiteException { Contexto contexto = este; CouchbaseLite.inicial(contexto); userArray.claro(); DatabaseConfiguration configuração = novo DatabaseConfiguration(); configuração.setDirectory(contexto.getFilesDir().getAbsolutePath()); Banco de dados banco de dados = nulo; Arquivo dbFile = novo Arquivo(contexto.getFilesDir(), "rateitdb"); tentar { banco de dados = novo Banco de dados("rateitdb", configuração); } captura (CouchbaseLiteException e) { e.printStackTrace(); } se (!dbFile.existe()) { banco de dados.createIndex("descFTSIndex", IndexBuilder.fullTextIndex(FullTextIndexItem.propriedade("URL"))); } SearchView pesquisa = (SearchView) findViewById(R.id.searchView); Expressão searchExp = FullTextExpression.índice("descFTSIndex").partida(Cordas.valueOf(pesquisa.getQuery())) ; Consulta consulta = nulo; se (pesquisa.getQuery().toString().acabamento().isEmpty()) { consulta = (Consulta) Criador de consultas.selecionar(SelecionarResultado.todos()).de(Fonte de dados.banco de dados(banco de dados)) .onde(Expressão.propriedade("para").igual a(Expressão.string("rangana")) .e(Expressão.propriedade("tipo").igual a(Expressão.string("recebido")))); } mais { consulta = (Consulta) Criador de consultas.selecionar(SelecionarResultado.todos()).de(Fonte de dados.banco de dados(banco de dados)) .onde(Expressão.propriedade("para").igual a(Expressão.string("rangana")) .e(Expressão.propriedade("tipo").igual a(Expressão.string("recebido"))) .e(searchExp)); } int linhas numéricas = consulta.executar().allResults().tamanho(); Torradas.makeText(getApplicationContext(), "num rows:::"+ linhas numéricas , Torradas.LENGTH_LONG).show(); tentar { consulta.executar().allResults().forEach(resultado -> { Dicionário thisDocsProps = resultado.getDictionary(0); Cordas enviar para = thisDocsProps.getString("sendto").acabamento(); Cordas URL = thisDocsProps.getString("URL").acabamento(); Cordas classificação = thisDocsProps.getString("classificação").acabamento(); flutuante estrelas de classificação = thisDocsProps.getFloat("ratingstars"); int estrelas = (int) estrelas de classificação; classificação = Cordas.valueOf(thisDocsProps.getFloat("ratingstars")); userArray.adicionar(novo Usuário(enviar para, URL, classificação,estrelas de classificação)); }); } captura (CouchbaseLiteException e) { e.printStackTrace(); } userAdapter = novo Adaptador personalizado do usuário(Atividade principal.este, R.layout.layout personalizado, userArray); userList = (Visualização de lista) findViewById(R.id.listView); userList.setItemsCanFocus(falso); userList.setAdapter(userAdapter); userList.setOnItemClickListener(novo OnItemClickListener() { @Override público vazio onItemClick(Visão do adaptador<?> pai, Ver v, final int posição, longo id) { Registro.i("Visualização de lista clicada", "**********"); Torradas.makeText(Atividade principal.este, "List View Clicado:" + posição, Torradas.LENGTH_LONG).show(); } }); banco de dados.próximo(); } |
O dados recebidos As funções são ativadas quando SOLICITAÇÕES DE CLASSIFICAÇÃO RECEBIDAS é clicado. Ele exibe todas as solicitações de classificação recebidas, executando uma consulta no banco de dados local para obter os registros.
Ele permite que você insira uma classificação e cria um registro JSON com a classificação. Quando o registro TAXA é clicado, ele grava a solicitação de volta no banco de dados com um tipo de documento de classificado. Se o DELETE é clicado, o registro é excluído definindo-se o tempo de vida do documento (TTL) para expirar.
As novas seções de código funcionam da seguinte forma:
-
- Primeiro adicionamos um índice FTS se o arquivo de banco de dados não existir, indicando a primeira entrada no aplicativo.
- Crie a expressão de pesquisa se o usuário inserir uma string de pesquisa
- Crie a consulta usando a expressão de pesquisa e execute-a
Instalação da fiação do layout
O código a seguir precisa ser adicionado a activity_main.xml. Ele adiciona o botão de pesquisa e seu rótulo:
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 |
<SearchView androide:id="@+id/searchView" androide:layout_width="226dp" androide:layout_height="40dp" androide:layout_marginStart="4dp" androide:layout_marginEnd="8dp" androide:layout_marginBottom="4dp" androide:fundo="@color/white" aplicativo:layout_constraintBottom_toTopOf="@+id/listView" aplicativo:layout_constraintEnd_toEndOf="pai" aplicativo:layout_constraintStart_toEndOf="@+id/textView4" aplicativo:layout_constraintTop_toBottomOf="@+id/Received" /> <TextView androide:id="@+id/textView4" androide:layout_width="158dp" androide:layout_height="38dp" androide:layout_marginStart="10dp" androide:layout_marginBottom="4dp" androide:fundo="#7BE67F" androide:backgroundTint="#7BE67F" androide:fontFamily="sans-serif-black" androide:gravidade="center" (centro) androide:texto="Texto de pesquisa" androide:textAllCaps="true" (verdadeiro) androide:textStyle="negrito" aplicativo:layout_constraintBottom_toTopOf="@+id/listView" aplicativo:layout_constraintStart_toStartOf="pai" aplicativo:layout_constraintTop_toBottomOf="@+id/Received" /> |
Compilação do código
Quando todo o código tiver sido atualizado, clique em Build → ReBuild Project. Quando isso for bem-sucedido, clique em Criar → Executar.
Você será solicitado a escolher o emulador na primeira vez que executar o aplicativo, por exemplo, selecione o NEXUS 5X API 25, como eu fiz. Quando a execução estiver concluída, a página principal terá a seguinte aparência:
Agora você implantou com êxito o código no emulador de sua escolha. Quando o usuário digita uma parte da string de URL, os resultados relevantes são exibidos.
Próximas etapas
Esta é a segunda parte da série de blogs, Criação de um aplicativo móvel com o Couchbaseque se concentra em uma solução móvel completa de ponta a ponta. A primeira parte mostrou como criar um aplicativo que usa um banco de dados Couchbase Lite incorporado para armazenar, recuperar e excluir documentos armazenados localmente no dispositivo.
A Parte 2 adicionou a capacidade de fazer pesquisas baseadas em texto, e a terceira e última parte desta série adicionará a sincronização ponto a ponto e a sincronização com um banco de dados centralizado.
Os principais recursos mencionados nesta postagem incluem:
- Parte 1 - Criação de um aplicativo móvel com o Couchbase
- Repositório do GitHub - incluindo o código do projeto do aplicativo Rateit
- Couchbase Mobile - informações sobre o produto
- Documentação do Couchbase Lite
- Estúdio Android