Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Este artigo apresenta técnicas de persistir dados em Android, fugindo do tradicional SQLite usado pela maioria dos programadores desta plataforma.


Para que serve:

Este artigo pode ser utilizado por programadores, iniciantes ou avançados, que conheçam os princípios básicos da plataforma Android e necessitam de alternativas para persistir dados em seus aplicativos.


Em que situação o tema é útil:

Este artigo pode ser utilizado por desenvolvedores e/ou estudantes que desejam aprimorar seus conhecimentos referentes a esta nova plataforma de desenvolvimento mantida pela Google.

Resumo DevMan

O surgimento de novas tecnologias para o desenvolvimento de aplicativos para a plataforma móvel já concebeu modelos mais sofisticados de persistência. Essas ferramentas, além de facilitar o processo de persistência, dão ao usuário opções para persistência. Dentre as plataformas para desenvolvimento móvel, sem dúvida a que mais se popularizou nos últimos anos foi o Android. Nesta plataforma, para a persistência de dados, muitos desenvolvedores Android utilizam o tradicional SQLite. Entretanto, outras opções interessantes que permitem a persistência de pequenas quantidades de dados também existem e serão o tema de discussão deste artigo.

Autores: Ricardo Ogliari e Robison Cris Brito

Hoje, é muito difícil pensar na concepção de um aplicativo, seja ele para a plataforma web, desktop ou mobile, sem antes imaginar os procedimentos necessários para a persistência de seus dados. Essa persistência pode ser simples, como armazenar a pontuação de um usuário em um jogo, armazenar as configurações do aplicativo, como usuário, senha, volume do jogo, nível de dificuldade, podendo ser incrementado para uma persistência mais sofisticada, armazenando dados em múltiplas tabelas, estando estas relacionadas entre si, ou, até mesmo, integrando diferentes fontes de informações, como por exemplo a base de dados existente em um aparelho celular tradicional e um repositório remoto de dados existente na web.

Em plataformas móveis mais antigas, este trabalho era muito trabalhoso. Podemos citar como exemplo a primeira versão da plataforma Java ME, onde a persistência era realizada como nos velhos programas desenvolvidos em Clipper ou Cobol, utilizando a persistência de dados binário, onde não existia banco de dados e nem tabelas, apenas arquivos, e os dados eram armazenados um após o outro (sequêncial), cabendo inclusive ao programador delimitar os campos persistidos, separando-os com caracteres especiais ou marcadores (como os metadados existentes nos arquivos xml de hoje).

Felizmente, para nós programadores e para o mundo mobile, o Java ME evoluiu muito, até mesmo alguns frameworks foram criados para burlar as dificuldades impostas pelo modelo de persistência existente, um bom exemplo é o framework brasileiro Floggy.

Além disso, o surgimento de novas plataformas para o desenvolvimento de aplicativos para a plataforma móvel já concebeu modelos mais sofisticados de persistência, sendo muitas vezes melhores que alguns modelos existentes em outras plataformas menos limitadas, como desktop e web.

Essas ferramentas, além de facilitar o processo de persistência, dão ao usuário opções para persistência, podendo ser escolhido o que mais se adapta a um problema específico.

Dentre as plataformas para desenvolvimento móvel, sem dúvida a que mais se popularizou nos últimos anos foi o Android. Com sua arquitetura já projetada para aparelhos não tão limitados quanto os tradicionais aparelhos celulares que rodam Java ME, mais abrangente do que o tradicional iPhone, uma vez que os aparelhos que rodam Android não são tão caros, e ainda contam com APIs (Application Programming Interface) que permitem a utilização de recursos nativos do aparelho.

Para a persistência de dados, muitos desenvolvedores Android utilizam o tradicional SQLite, uma ótima e robusta opção, mas que muitas vezes é utilizado para armazenar dados simples, como conteúdo de campos, configurações do aplicativo e pequenas quantidades de dados.

Por este motivo, o objetivo deste artigo é apresentar novas técnicas de persistência, essas simples e ágeis, que permitem a persistência de pequenas quantidades de dados. São elas:

• Shared Preferences;

• PreferenceActivity;

• Internal Storage;

• Armazenamento em Cache;

• External Storage.

Utilizando Shared Preferences

O Shared Preference é um framework Android que permite armazenar dados de tipo primitivo utilizando o formato chave-valor. Ele permite trabalhar com todos os tipos primitivos incluindo também o tipo String, tratado como tal em muitas plataformas.

Como o nome sugere, o Shared Preference é perfeito para armazenar as preferências e configurações de uma aplicação, onde, geralmente, persistimos apenas alguns poucos dados, de forma rápida e simples, sendo que na maioria das vezes esses dados são dos tipos primitivos.

Para exemplificar o uso desse framework, será desenvolvido um aplicativo simples, onde uma única informação booleana, que corresponde a uma configuração do aplicativo será armazenada. A tela desse aplicativo é apresentada na Figura 1.

Figura 1. Simulando uma tela de configuração, onde a informação deve ser persistido.

Para o desenvolvimento desta interface, será necessário criar um projeto Android. Para este desenvolvimento, pode ser utilizada a IDE Eclipse ou Netbeans (ou outra IDE com suporte a Android). Ambas trabalham de forma simular com o desenvolvimento de aplicações nesta plataforma.

Na Listagem 1 apresentamos o arquivo main.xml, sendo que este define a interface visual do aplicativo apresentado na Figura 1.

Listagem 1. Main.xml - Arquivo xml referente a interface gráfica do aplicativo.


  01. <?xml version="1.0" encoding="utf-8"?>
  02. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  03.     android:orientation="vertical"
  04.     android:layout_width="fill_parent"
  05.     android:layout_height="fill_parent" >
  06. <ImageView  android:layout_width="fill_parent" 
  07.     android:layout_height="wrap_content"
  08.     android:id="@+id/img" />
  09. <Button android:layout_width="fill_parent" 
  10.     android:layout_height="wrap_content"
  11.     android:id="@+id/btn"
  12.     android:text="On/Off" />
  13.  </LinearLayout>  ... 

Quer ler esse conteúdo completo? Tenha acesso completo