Android com Kotlin: persistência de dados com o Room | Alura Cursos Online
Primeiras aulas do curso Android com Kotlin: persistência de dados com o Room
Android com Kotlin: persistência de dados com o Room
Introdução ao armazenamento de dados no Android - Apresentação
Oi, pessoal! Eu sou o Alex Felipe, instrutor da Alura e vou apresentar para você o curso de Android com Kotlin, persistência de dados com o Room. A partir desse curso eu vou assumir que você tenha alguns pré-requisitos para que dessa forma conseguirmos focar apenas um conteúdo no Room, que é justamente o seguinte, é todo o conteúdo que vimos durante esse curso de Android com Kotlin: Personalize o seu App.
Porque nesse curso desenvolvemos um aplicativo que vai ter toda a estrutura base para conseguirmos prosseguir para o próximo tópico, que é esse tópico de persistência de dados. Caso você não conheça o projeto que foi desenvolvido durante esse curso, você também pode acessar a partir do GitHub Alura, que mostra esse link do projeto que vai estar disponível durante o curso e então você pode ver justamente o "README" que mostra mais informações desse projeto.
Então aqui no "README" temos até mesmo um banner bonito para nós e mostramos qual é o nome do projeto que é chamado de Orgs, e a ideia dele é justamente de simular um e-commerce de produtos naturais. Se vamos nas funcionalidades do projeto é indicado que app consegue fazer uma listagem de produtos, que vai ter imagem, vai ter título, valor e descrição.
E também conseguimos fazer o cadastro. Então se vermos essa amostra em Gif, temos uma amostra de como ele apresenta essas informações. Então ele tem a lista de produtos que conseguimos acessar o formulário que lhe permite inserir as informações do produto, como é o caso do nome, descrição, valor e também a imagem.
Depois salvamos e mantemos essas informações na lista como podemos ver. E o grande detalhe aqui desse projeto é que ele foi focado mais na parte de visual, na parte de personalização aqui do aplicativo, ou seja, cada vez que o nosso usuário fecha o aplicativo ou reinicia o celular, essas informações são perdidas e vai ser exatamente esse o ponto que vamos resolver durante esse curso, é de manter as informações do nosso usuário.
Porque esse é o comportamento mais do que esperado para qualquer usuário que utiliza o aplicativo, que é manter todas as ações que ele fez durante o nosso aplicativo. Então ele inseriu? Ele alterou? Removeu? Buscou? O que ele fez? Precisamos manter essas informações. E vai ser exatamente o nosso foco durante esse curso.
Caso você já tenha feito esse curso, tem acesso a esse projeto, um ponto importante que você precisa notar, é que nesse curso eu vou assumir também que você tenha acesso a essa tela a mais, que ela foi proposta no desafio. Que é a tela de detalhes do produto.
Então como podemos ver, é uma tela que é aberta quando clicamos no produto, então eu também já vou assumir que tem essa tela, justamente para já termos toda a parte base visual, então dessa forma só ficamos no Room.
Então se você não fez esse desafio, fica à vontade em fazer esse desafio ou até mesmo baixar o projeto novamente, já com acesso ao desafio. E agora que eu passei essa parte de pré-requisitos, eu vou focar um pouco mais em como vamos solucionar essa parte de persistência de dados e quais serão os tópicos técnicos durante o curso.
Então novamente vamos utilizar o Room, até mesmo aqui na documentação do Android nós temos uma informação a mais do que ele faz.
Então temos "Salvar dados em um banco de dados local usando o Room". Então vai ser justamente isso que ele vai fazer para nós, ele vai nos introduzir uma solução de banco de dados para conseguirmos salvar informações, dados estruturados e dessa forma conseguirmos fazer até mesmo um comportamento comum em diversos apps, que é conhecido como CRUD, que vem de Create, Read, Update e Delete, que seria justamente inserção, leitura, atualização e remoção de dados. Então é isso que vamos fazer durante esse projeto, vamos permitir que o nosso usuário consiga fazer essas quatro ações e manter essas informações de maneira permanente.
Então por exemplo, se eu acessar o nosso projeto e clicar agora na nossa tela de detalhes, temos o menu a mais que também vamos aprender como ele faz isso, como implementar o menu.
Que é justamente o menu para edição aqui no lápis e outro menu para remoção na lixeira. Então se clicamos na edição, agora abrimos o formulário já com as informações do produto e conseguimos editar. Como é o caso de colocar o invés de morango, eu posso colocar morangos, tanto no nome como na descrição. Ao invés de 10 reais quero colocar 12. Em seguida vou salvar.
Ele já mantém as informações, seja na tela de detalhes como também na lista. Justamente porque as informações estão no banco de dados. Mesmo que fechemos o aplicativo. Então fechei o aplicativo e abri novamente, essas informações são mantidas e é isso que vamos fazer.
E em seguida, como vimos, podemos remover os nossos registros e ficamos sem nenhuma informação. Então além da inserção, temos a alteração, temos remoção e também a leitura.
Então esse é o conteúdo que vamos ver durante esse curso. É claro, existem mais detalhes técnicos, como é o caso de como instalamos o Room, faz as configurações, como colocamos cada comportamento e a parte principal que é como integramos o Room a um projeto já existente, que já tem um código pronto em uma estrutura base. Que é justamente essa estrutura que vimos durante esse curso de personalização do app.
Então esse vai ser nosso desafio, esse vai ser nosso conteúdo. Espero que vocês tenham gostado e eu conto com a sua presença na primeira aula. Então até já.
Introdução ao armazenamento de dados no Android - Preparando o ambiente
Neste curso vamos reutilizar o projeto Orgs, que é um projeto que simula um e-commerce de produtos naturais. Esse projeto foi desenvolvido em cursos dessa plataforma, sendo mais específico, o curso de Android com Kotlin: Personalize o seu App.
Então se você fez esse curso, você produziu esse projeto, vamos reutilizá-lo também durante esse curso. Só que existe um grande detalhe que é muito importante de você notar.
A partir deste curso eu vou assumir que você também tenha feito uma implementação extra, que foi sugerida em um desafio do curso de personalização do app, que é justamente a tela de detalhes do produto. Qual é essa tela? Ao clicar em cada um dos produtos, abrimos uma nova tela adicionando as informações do produto que foi clicado.
Então aquele primeiro que não tem nenhuma imagem, tem o valor de 123, "teste" no nome e "teste" na descrição, apresenta essa tela para nós.
Em um outro produto que tem mais informações, como é o caso desse que tem morangos, que tem esse valor maior, que é 12345, o nome é "morangos" e tem uma descrição bastante grande, que é o famoso Lorem ipsum só para encher mesmo de informação e apresentar um conteúdo com muito texto, como podemos ver tem até um scroll, ele vai apresentar o visual um pouco diferente.
Então veja que foi proposto esse desafio e provavelmente, se você fez o curso sem fazer o desafio, você não fez essa implementação. Então qual é o próximo passo caso você não fez essa implementação? Você tem duas opções: Você pode baixar novamente o projeto com o link que vamos oferecer para você nas atividades ou então, nessa mesma atividade vamos linkar o desafio caso você queira encarar esse desafio, queira entender passo a passo como foi feita essa tela.
Então por exemplo, entender como foi feito esse layout com as técnicas que aprendemos durante aquele curso, como foi feita a implementação do listener de clique do nosso recyclerview para cada um desses itens, como mandamos uma informação de uma activity para essa outra activity, como removemos a appbar e assim por diante.
No link do desafio está propondo todos esses detalhes, depois existe um link de conclusão de resolução, com o código via commit e você também pode acessar sem nenhum problema nesta atividade do desafio. Se você tiver tudo pronto, o desafio está certo, o projeto está exatamente como estou mostrando, você pode prosseguir com o curso sem nenhum problema. Então é isso que eu queria passar para você, para você de fato aproveitar o curso o máximo possível. Então até já.
Introdução ao armazenamento de dados no Android - Opções de armazenamento do Android
Como vimos, o nosso aplicativo não tem a capacidade de manter as informações do nosso usuário, isso significa que ao matar o nosso aplicativo e abri-lo novamente, percebemos que as informações do nosso usuário são perdidas. Em outras palavras, precisamos utilizar uma técnica de persistência de dados para manter as informações do nosso usuário. E para isso temos algumas possibilidades dentro do Android Framework, que vamos conhecer a partir de agora e vamos entender qual dentre elas vamos utilizar para solucionar esse problema.
Para isso vamos acessar uma página da documentação que fala a respeito de arquivos e dados do app. Nessa página tem um resumo do que podemos fazer de armazenamento de dados do nosso usuário e depois, logo em seguida, vamos conhecer as informações necessárias para então escolhermos qual vai ser a opção que vamos utilizar.
Então vamos lá. Logo no começo, nesse primeiro parágrafo, fala "Saiba como preservar os dados do usuário e do aplicativo, assim como os arquivos no dispositivo, em pares de chaves-valor, em um banco de dados ou com outros tipos de dados, e como compartilhar dados entre outros aplicativos e dispositivos".
Então veja que temos diversas maneiras para manter as informações do nosso usuário. E para descrever com mais detalhe toda essa frase que vimos agora, temos uma outra página que mostra detalhadamente quais são as possibilidades indicando cada um desses pontos que foram mencionados nesse primeiro parágrafo, que é nesse link "Visão geral do armazenamento de dados e arquivos".
Clicando nele vamos perceber que aquilo que estava descrito naquela frase de uma maneira muito genérica, agora é classificado aqui em quatro opções possíveis que temos dentro do Android Framework para utilizar como uma solução de armazenamento de dados persistentes.
Então vamos lá. Pegando até mesmo começo, diz o seguinte, que o Android usa o sistema de arquivos parecido com o sistema de arquivos em disco de outras plataformas. Então como o Windows, Linux e Mac, no nosso Android também temos disponível um sistema de arquivos muito parecido. E dentre essas possibilidades que temos para salvar informações, vamos ter como destaque o armazenamento específico do app, armazenamento compartilhado, preferências e bancos de dados.
Vamos entender o que cada um deles significa, o que eles fazem, quando podemos considerá-los e vamos entender qual dentre essas opções vamos utilizar como solução no nosso aplicativo.
Então quando falamos de armazenamento específico do app, trata-se de uma técnica que conseguimos armazenar arquivos que são destinados apenas ao nosso dispositivo, ao nosso aplicativo de fato. Então se você tem uma necessidade de armazenar qualquer tipo de arquivo que só o seu aplicativo vai acessar, você pode considerar essa técnica. Podemos salvar essas informações em armazenamento interno ou então em armazenamento que consideramos como externo, que seria aquele armazenamento a partir de SD Card, que pode ser inserido ou removido no dispositivo.
Só que o grande detalhe que precisamos notar é que vamos utilizar diretórios desses armazenamentos internos para salvar informações que são mais confidenciais de fato, que outros aplicativos não podem acessar. Então se você tiver esse tipo de cenário que você quer salvar arquivos que só podem ser acessados pelo seu aplicativo de maneira confidencial, você pode considerar essa técnica de armazenamento específico do app para então solucionar o seu problema.
Em seguida temos o armazenamento compartilhado. Ele vai ter uma característica muito similar ao que vemos no específico, só que a grande diferença é que conseguimos compartilhar esses arquivos que salvamos. Então outros aplicativos conseguem acessar. Então geralmente costuma até ficar em um meio externo de armazenamento, não fica dentro do diretório do nosso dispositivo para que cada um consiga acessar, mesmo que nem tenhamos o aplicativo instalado no nosso dispositivo. Então é um outro fator interessante de se considerar.
Em seguida temos o Preferências. Em Preferências vamos ter uma estrutura muito similar ao que vimos no map, naquele curso falando sobre Collections. Então lembra que o map é aquela estrutura que temos uma chave e então inserimos o valor? E cada vez que quisermos recuperar aquele valor podemos utilizar aquela chave? Pois é, em Preferências vamos ter exatamente o mesmo tipo de comportamento, só que nesse caso vamos ter algumas características diferentes.
A primeira delas é que só podemos salvar dados primários, do tipo primário, então tipos primitivos, como é o caso de int, long, double, float, boolean, string e assim por diante. Tem uma lista, caso você consulte a documentação, mas basicamente classificamos como tipos primitivos.
Em seguida também tem uma característica de dados privados, então se você só quer acessar no seu dispositivo, no seu aplicativo no caso, você pode considerar essa técnica sem nenhum problema. E a grande diferença em relação ao map que vimos, é que esses dados ficam permanentes, então eles ficam salvos nos dispositivos, no seu aplicativo e só são de fato removidos se você desinstalar o seu aplicativo. Então se você mata o seu aplicativo, reinicia o seu dispositivo, as informações são mantidas, elas podem ser recuperadas.
Em seguida, por fim, vamos ter o banco de dados. Nessa opção conseguimos armazenar dados estruturados em um banco de dados particular. Então novamente temos a característica que só o nosso aplicativo vai ter acesso a essas informações e aqui até mesmo indica termos uma biblioteca para fazer o uso de banco de dados, que é o que vamos falar logo a seguir.
Nesse caso é a biblioteca de persistência Room. Não precisa se preocupar nesse momento, vamos saber mais do que é esse Room logo a seguir. O importante nesse momento é entender qual dentre essas opções vamos utilizar. E dado que agora vimos o banco de dados, você pode até ficar na dúvida do que seriam esses dados estruturados. Dados estruturados é qualquer tipo de dado que tem um certo padrão para ser armazenado.
Ou seja, se voltamos no nosso aplicativo e acessamos a classe produto, notamos que trata-se de um dado estruturado, porque existe um padrão para conseguirmos salvar essa informação.
Como assim padrão? Todo produto sempre vai ter um nome, uma descrição, um valor, uma imagem e também pode ter outras informações, podemos determinar isso. Mas percebe que existe já uma estrutura pronta para definir o que é um produto? Pois é, quando falamos de dado estruturado, estamos falando desse tipo de dado. E nesse tipo de dado é muito comum em banco de dados, que vai ter uma estrutura de tabelas, linhas, colunas, que vai representar uma linha cada um dos nossos registros, poderia ser a nossa lista de produtos, e as colunas vai ser cada um das nossas properties.
Então conseguimos salvar uma linha, que seria um produto com uma coluna nome, descrição, valor, e podemos até mesmo fazer consultas ou buscar todas as informações de uma vez, inserir, alterar, remover. Percebe que é o tipo de característica que precisamos nesse momento? E vai ser exatamente por isso que vamos utilizar essa técnica ao invés das outras possibilidades. As outras possibilidades existem para resolver outras situações, às vezes você quer salvar uma imagem, um documento ou então de repente é só um dado primitivo e mais nada, você pode considerar as outras opções.
No nosso caso queremos salvar lista de produtos, queremos buscar lista de produtos, queremos inserir um produto novo, alterar, remover e assim por diante. Então por isso que o banco de dados se encaixa de uma maneira mais adequada para o nosso cenário. E é por isso que vamos considerá-lo.
Só para finalizar, agora que entendemos que vamos utilizar bancos de dados, se você quiser obter mais informações para entender os tipos de armazenamento, quando utilizar, características em comum, fique à vontade em consultar essa página da documentação.
Então tem uma tabela mostrando até mesmo qual é o tipo de conteúdo adequado para o tipo de armazenamento, como conseguimos acessar, se existe alguma permissão que precisamos, se outros aplicativos podem acessar, se os arquivos são removidos na desinstalação, assim como havíamos comentado.
Então nos arquivos específicos removemos na desinstalação, mas aquele de mídia, que é o compartilhado, não removemos, banco de dados também removemos e o preferência também, tudo isso porque são arquivos, são técnicas de armazenamento mais restritas. Então vão ficar super vinculados ao aplicativo, só ele consegue acessar, que é o que precisamos nesse caso, não queremos que outro aplicativo saiba todas as informações do nosso usuário, por exemplo.
Então são coisas que você precisa avaliar antes de decidir qual vai ser a opção que você vai escolher e até mesmo seguindo um pouco mais adiante, existem algumas perguntas indicando alguns casos de usos que você pode verificar se faz parte do seu caso, caso você implemente um aplicativo seu com solução de persistência de dados.
Então vai ter perguntas como: Quantos espaços seus dados exigem? Vai ter uma resposta indicando o que você pode fazer caso você tenha uma quantidade grande ou então uma quantidade razoável, vamos chamar assim. Qual é o nível de confiabilidade do seu acesso aos dados? Que tipo de dados você precisa armazenar? Os dados precisam ser particulares para o seu aplicativo?
Então veja que são casos que são comuns realmente no dia a dia, e de fato você vai pegar a documentação, dar uma olhada para ver se atinge a necessidade que você precisa. Tem mais informações abaixo, não é o objetivo do curso passar em todas elas, o objetivo era só de fato neste momento conhecer as opções, entender que banco de dados é o que vamos utilizar para esse nosso caso, que é o que vai resolver adequadamente o nosso problema.
E a seguir vamos entender mais como seguimos com o próximo passo do banco de dados, que é justamente a partir dessa biblioteca de persistência conhecida como Room. Então até já.
Sobre o curso Android com Kotlin: persistência de dados com o Room
O curso Android com Kotlin: persistência de dados com o Room possui 203 minutos de vídeos, em um total de 57 atividades. Gostou? Conheça nossos outros cursos de Android em Mobile, ou leia nossos artigos de Mobile.