Introdução
Zebra Technologies™ é líder global em impressão de códigos de barras, computação móvel, captura de dados e recursos relacionados. A Zebra oferece uma linha completa de computadores de mão robustos com scanners de código de barras incorporados. Esses dispositivos baseados em Android têm uma ampla gama de aplicativos, incluindo rastreamento de entregas, venda assistida e gerenciamento de ativos, para citar alguns.
Muitos desses aplicativos se encaixam perfeitamente com o Couchbase Mobile que fornece a plataforma de dados de apoio. Como o Couchbase Lite é um banco de dados NoSQL verdadeiro e completo, você tem o desempenho dos dados no dispositivo combinado com a fácil sincronização fora do dispositivo.
Para demonstrar um caso de uso, criamos um aplicativo de digitalização de inventário de amostra.

Captura de tela
Os dados consistem em informações sobre um conjunto fictício de livros. A leitura dos códigos de barras ISBN extrai as informações do Couchbase Lite banco de dados incorporado. Ele se baseia no Zebra DataWedge para leitura de código de barras ISBN.
O aplicativo completo, juntamente com dados de amostra, está disponível no GitHub aqui. Esta postagem examinará o código. Para ver a demonstração em ação e saber mais sobre a Zebra e o Couchbase, assista a este webinar do Zebra DEVTALK.
Visão geral
O aplicativo consiste em uma única atividade. O Couchbase Lite é integrado como uma biblioteca no projeto. O aplicativo é instalado sem nenhum dado. Armazenamos os dados de inventário no Couchbase Server. Os dados do dispositivo serão preenchidos em tempo de execução usando uma replicação bidirecional.
O DataWedge é executado como um componente separado no dispositivo. A API é totalmente orientada por Intents. Acionamos a varredura transmitindo uma intenção, e os dados retornam por meio de uma. Para habilitar isso, você associa um perfil do DataWedge ao seu aplicativo. (Dessa forma, o DataWedge pode, entre outras coisas, direcionar o aplicativo especificamente ao retornar um resultado).
O código (além do trabalho da interface do usuário) consiste em configurar o banco de dados, iniciar uma replicação e adicionar um botão de acionamento de verificação. Quando o resultado da verificação retorna (lembre-se de que é um ISBN), o aplicativo consulta o banco de dados para obter os detalhes do livro e os exibe. (Como observação, usamos o RxJava para lidar com multi-threading).
O perfil do Zebra DataWedge
O DataWedge faz uso elegante do sistema Android Intent. Isso requer a configuração de um perfil. Estas capturas de tela mostram as opções usadas aqui.

Ativar a varredura

Ativar intenções
Observe especialmente a configuração "Intent action". Precisaremos da mesma cadeia de caracteres no próprio aplicativo.
Inicialização do banco de dados e início da replicação
Para manter o aplicativo compacto, inicializamos o banco de dados no onCreate
no método ScanActivity
classe. Também configuramos a replicação lá.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// com/couchbase/mobile/zebra/ScanActivity.java tentar { DatabaseConfiguration configuração = novo DatabaseConfiguration(getApplicationContext()); banco de dados = novo Banco de dados("inventário", configuração); Ponto final targetEndpoint = novo URLEndpoint(novo URI("ws://localhost:4984/inventory")); ReplicatorConfiguration repConfig = novo ReplicatorConfiguration(banco de dados, targetEndpoint) .setReplicatorType(ReplicatorConfiguration.ReplicatorType.PUSH_AND_PULL) .setAuthenticator(novo BasicAuthenticator("usuário", "senha")) .setContinuous(verdadeiro); Replicador replicador = novo Replicador(repConfig); replicador.iniciar(); } captura(CouchbaseLiteException | URISyntaxException ex) { ex.printStackTrace(); } |
Tudo isso é muito simples. O ponto de extremidade é o endereço da nossa instância do Sync Gateway. Definir a replicação para contínuo
faz com que o Couchbase atualize constantemente o banco de dados em segundo plano.
Botão de varredura suave
Os dispositivos Zebra têm hardware dedicado para acionar o escaneamento. Adicionamos um botão na interface do usuário para fazer isso também. O retorno de chamada para cliques no botão mostra como usar a API baseada em intenção do DataWedge. Basta preencher a intenção com algumas cadeias de caracteres chave e deixar o Android cuidar do resto.
1 2 3 4 5 6 |
softScanButton.setOnClickListener(visualização -> { Intenção intenção = novo Intenção(); intenção.setAction(DATAWEDGE_ACTION); intenção.putExtra(DATAWEDGE_SOFT_SCAN_TRIGGER, DATAWEDGE_TOGGLE_SCANNING); sendBroadcast(intenção); }); |
Recebimento de resultados de exames
Uma vez acionado, o scanner se acende e captura os dados em segundo plano. Se for bem-sucedido, as informações do código de barras serão retornadas, também usando uma intenção.
Configuramos o DataWedge para fornecer a intenção usando startActivity
. É aqui que o Ação intencional
entra em ação a partir do perfil. Definimos um filtro de intenção em nosso manifesto do Android para corresponder à string dessa configuração.
Por padrão, isso normalmente criaria uma nova instância da atividade correspondente. Aqui, queremos apenas manter a mesma atividade em andamento e deixá-la processar o resultado. Fazemos isso definindo o modo de lançamento da atividade como singleTop
.
Isso significa que a intenção será entregue por meio do onNewIntent
método. Isso não afeta a intenção original que iniciou a atividade em primeiro lugar. Usamos um padrão comum de redefinir a intenção da atividade para a nova intenção em onNewIntent
e, em seguida, processando-o em onResume
.
Configuração da consulta
Interior onResume
Em seguida, fazemos uma verificação para ver se a intenção corresponde ao que esperávamos. Depois disso, extraímos o número ISBN e realizamos nossa consulta.
O Couchbase Lite usa uma interface no estilo de construtor para criar consultas. A API foi projetada para mapear diretamente para uma instrução SQL. Aqui, o SQL equivalente seria SELECT * FROM inventory WHERE isbn = "";
, onde <scan result>
representa a cadeia de caracteres que nos foi devolvida.
Isso se traduz no seguinte código.
1 2 3 4 5 6 7 8 |
Cordas isbn = intenção.getStringExtra(DATAWEDGE_INTENT_DATA); ... Consulta consulta = Criador de consultas .selecionar(SelecionarResultado.todos()) .de(Fonte de dados.banco de dados(banco de dados)) .onde(Expressão.propriedade("isbn").igual a(Expressão.string(isbn))); |
Esse recurso de consulta dinâmica foi adicionado ao Couchbase Lite 2.0. Ele é baseado na linguagem de consulta N1QL do Couchbase, que é um superconjunto do SQL. Para uma introdução mais profunda às consultas no Couchbase Lite, recomendo a leitura de esta postagem do blog.
Execução de consultas e resultados
Com o objeto de consulta em mãos, nós o executamos e recuperamos os resultados como uma lista. Esperamos que cada ISBN corresponda a um único livro. Se for bem-sucedida, mostraremos uma miniatura da capa do livro e outras informações. Se o livro estiver faltando ou se obtivermos mais de um resultado, mostraremos um erro no lugar da capa do livro. Esse código é agrupado usando o RxJava para que a consulta seja executada em um thread em segundo plano.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
tentar { resultados = consulta.executar().allResults(); } captura(CouchbaseLiteException ex) { fonte.onError((ex)); } se (0 == resultados.tamanho()) { informações = aviso("Ausente"); } mais se (1 < resultados.tamanho()) { informações = aviso("Duplicado"); } mais { Dicionário resultado = resultados.obter(0).getDictionary(banco de dados.getName()); informações = resultado.toMap(); InputStream é = resultado.getBlob("cobertura").getContentStream(); Mapa de bits miniatura = BitmapFactory.decodificar fluxo(é); informações.colocar("thumbnail", miniatura); } |
Recuperamos todo o conteúdo do documento como um objeto Dictionary. (Dicionários são estruturas de dados imutáveis com semântica semelhante a um mapa definida pelo Couchbase Lite). Precisamos converter a imagem da capa do livro, anexada como um blob, em um bitmap. Por conveniência, convertemos o dicionário em um mapa, criamos o bitmap e o adicionamos ao mapa. Isso é passado para o código da interface do usuário.
Concluindo
O repositório do GitHub para esse projeto tem todos os extras necessários para executá-lo. Há um arquivo de configuração do Sync Gateway, configurado para se comunicar com uma instância local do Couchbase Server. Você também pode encontrar um PDF com alguns exemplos de códigos de barras.
Para saber mais sobre como integrar o escaneamento de código de barras em seu aplicativo, visite https://developer.zebra.com.
Pós-escrito
O Couchbase é de código aberto e grátis para experimentar.
Comece a usar com código de amostra, consultas de exemplo, tutoriais e muito mais.
Encontre mais recursos em nosso portal do desenvolvedor.
Siga-nos no Twitter @CouchbaseDev.
Você pode postar perguntas em nosso fóruns.
Participamos ativamente de Estouro de pilha.
Entre em contato comigo pelo Twitter com perguntas, comentários, tópicos que você gostaria de ver etc. @HodGreeley