Construiremos um aplicativo completo para gerenciamento de artigos publicados. Nesta aplicação iremos considerar as quatro operações básicas no banco de dados, chamadas conceitualmente de CRUD (Create, Read, Update e Delete).
O leitor deste artigo estará apto a fornecer uma arquitetura correta de persistência de dados através de banco de dados relacionais no Android. Este é um quesito muito importante para qualquer profissional que deseje ser visto com bons olhos pelo exigente mercado mobile.
O uso dos smartphones cresceu muitos nos últimos anos. Isso acarretou em um grande esforço das fabricantes em melhorias no hardware e das gigantes de software um reposicionamento quanto aos sistemas operacionais para estes tipos de dispositivos. E isso gerou uma bola de neve que trouxe grandes e constantes inovações no setor, refletindo cada vez mais em usuários e desenvolvedores mais satisfeitos com as novas tecnologias, que os permitem ficar mais tempo conectados.
Isso também teve outra consequência direta: os usuários passaram a armazenar seus dados não só nos computadores Desktop, mas também em seus smartphones. Logo, estes dispositivos passaram a receber uma quantidade maior e crescente de dados. Principalmente dados de áudio e mídia.
Logicamente, as plataformas móveis perceberam que teriam que fornecer métodos de persistência de dados mais sofisticados que o tradicional armazenamento baseado em arquivos, como acontecia com o RMS (Record Management System), este utilizado pelos programadores Java ME/MIDP para a persistência dos dados. Hoje em dia, todas as principais plataformas oferecem mais de uma maneira de salvar e recuperar informações produzidas por nossos aplicativos.
Com a plataforma Android não poderia ser diferente. Este fornece diferentes métodos de persistência. Alguns deles são através de armazenamento interno (no smartphone) e externo (cartão de memória). Ambos podem ser muito úteis para fazer armazenamento de imagens, por exemplo. No caso de armazenamento em cartão, deve-se atentar para não utilizá-los no armazenamento de informações essenciais para o correto funcionamento do aplicativo, pois a mídia pode ser removida a qualquer momento, e o aplicativo deixará de ser executado.
Além disso, a plataforma também fornece as classes chamadas SharedPreferences, sendo esta uma forma de persistir pares de chave/valor para todos os tipos primitivos Java e mais o tipo String. Algo semelhante à utilização de Properties na programação Java tradicional. Seu uso e funcionamento são muito simples, podendo ser muito útil para persistências simples, como a pontuação de um jogo, por exemplo.
Porém, o SharedPrefererences não é indicado para grande quantidade de dados ou conjunto de informações com grande complexidade. Nesse momento entram em ação os bancos de dados relacionais, utilizados há alguns anos em outros ambientes, como web e desktop, por exemplo. No Android o banco de dados mais utilizado é o SQLite.
Uma característica interessante da plataforma é que o SQLite já está disponível na plataforma Android, não havendo necessidade de instalá-lo. Além disso, o Android oferece suporte completo ao banco, através de uma API com um rico conjunto de classes e métodos que abstraem as complexidades dos códigos SQL. Assim, não precisamos montar a cláusula SQL inteira para atualizar uma linha na tabela, ou ainda, para fazer uma pesquisa na mesma. O Android nos fornece um método, onde passando alguns parâmetros obtemos um apontador para os dados retornados, podendo navegar pelo resultado como se estivéssemos escolhendo uma folha em um arquivo.
Assim, o objetivo deste artigo é apresentar uma forma simples de utilizar o banco de dados SQLite na plataforma Android. Aqui apresentaremos as principais classes do Android no uso do SQLite: SQLiteOpenHelper e SQLiteDatabase e como utilizá-las dentro de um Activity.
Para uma compreensão melhor, o leitor construirá um aplicativo completo para gerenciamento de artigos publicados. Desta forma, veremos como fazer as quatro operações básicas no banco de dados, chamadas conceitualmente de CRUD (Create, Read, Update e Delete) e ao final do artigo serão apresentadas as transações exclusivas.
O projeto
Todo escritor gosta de arquivar suas publicações e organizar quais estão pendentes, quais estão sendo revisados, quais estão prontos para publicações e quais já estão nas bancas. Então, o projeto que vamos criar neste estudo de caso é um gerenciador de artigos, este chamado de “ManagerArticles”.
O funcionamento é bem simples. Na primeira tela teremos uma lista com os artigos cadastrados e a opção de inserir um novo registro, conforme Figura 1. Tanto o botão adicionar como a opção de editar apresentará a tela mostrada na Figura 2. A diferença é que no caso da edição os campos são preenchidos com o conteúdo armazenado no banco de dados.
Construindo a aplicação sem o banco de dados
Inicialmente vamos construir os elementos e as telas da aplicação, sem nos preocuparmos com o banco de dados
A classe utilitária Artigo
O primeiro passo será a construção de uma classe Artigo. Ela será utilizada em diferentes pontos do nosso aplicativo. Isso porque o nosso banco de dados terá as ações CRUD (Create, Read, Update e Delete) que envolvem os mesmos atributos, relacionados a mesma entidade. Desta forma, a classe Artigo será uma “visão” da tabela Artigo em um banco de dados relacional tradicional. Veja a Listagem 1.
01. import java.io.Serializable;
02.
03. public class Artigo implements Serializable {
04. private static final long serialVersionUID = 1633833011084400384L;
05. int id;
06. String revista;
07. String nome;
08. String edicao;
09. int status;
10. int pago;
11. }
Perceba que os atributos desta classe são os mesmos apresentados na Figura 2. Isso porque ao inserir um novo artigo temos que definir o nome, a revista e edição onde foi/serão publicados, seu status e se o mesmo já foi pago ou não ao autor.
O atributo serialVersionUID é utilizado porque a classe implementa a interface Serializable, assim, se fez necessário este atributo para que possamos enviar uma instância da mesma como um extra de uma Intent.
Layouts das telas
O segundo passo é criar os arquivos XML que representam as duas telas da aplicação, estas apresentadas nas Figura 1 e 2. A Listagem 2 apresenta o código da tela responsável para inclusão e alteração de um registro.
01.<?xml version="1.0" encoding="utf-8"?>
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03. android:layout_width="match_parent"
04. android:layout_height="match_parent"
05. android:orientation="vertical" >
06.
07. <TextView
08. android:id="@+id/textView1"
09. android:layout_width="wrap_content"
10. android:layout_height="wrap_content"
11. android:text="Nome:" />
12.
13. <EditText
14. android:id="@+id/edtNome"
15. android:layout_width="match_parent"
16. android:layout_height="wrap_content"
17. android:ems="10" >
18. </EditText>
19.
20. <TextView
21. android:id="@+id/textView2"
22. android:layout_width="wrap_content"
23. android:layout_height="wrap_content"
24. android:text="Revista:" />
25. <EditText
26. android:id="@+id/edtRevista"
27. android:layout_width="match_parent"
28. android:layout_height="wrap_content"
29. android:ems="10" />
30.
31. <TextView
32. android:id="@+id/textView3"
33. android:layout_width="wrap_content"
34. android:layout_height="wrap_content"
35. android:text="Edição:" />
36.
37. <EditText
38. android:id="@+id/edtEdicao"
39. android:layout_width="match_parent"
40. android:layout_height="wrap_content"
41. android:ems="10"
42. android:inputType="number" />
43.
44. <TextView
45. android:id="@+id/textView4"
46. android:layout_width="wrap_content"
47. android:layout_height="wrap_content"
48. android:text="Status:" />
49.
50. <Spinner
51. android:id="@+id/spEstado"
52. android:layout_width="match_parent"
53. android:layout_height="wrap_content"
54. android:entries="@array/status" />
55.
56. <CheckBox
57. android:id="@+id/cbPago"
58. android:layout_width="wrap_content"
59. android:layout_height="wrap_content"
60. android:text="Pago" />
61.
62. <Button
63. android:id="@+id/button1"
64. android:layout_width="wrap_content"
65. android:layout_height="wrap_content"
66. android:text="Salvar"
67. android:onClick="salvar"
68. android:layout_gravity="center_horizontal" />
69. </LinearLayout>
Na primeira linha temos o cabeçalho XML. Na linha 2 temos o TextView que servirá de contêiner a todos os outros elementos de UI que serão apresentados na tela. Como desejamos um layout onde um componente é posicionado abaixo do outro, utilizamos o ...
Confira outros conteúdos:
Navegação entre telas no Android
Utilização de sensores na plataforma...
Listas e Adapters no Android
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.