Vous êtes sur la page 1sur 29

Aula 08

Armazenamento de
Dados

Prof. Dr. Jucimar Souza


jucibs@gmail.com
jucibs@ifam.edu.br
Armazenamento de Dados
Android fornece diversos modelos para
persistir dados de aplicao
Semelhante a JME e outros ambientes
mveis
Capacidades mnimas de dispositivos
Android so levadas em conta
Memria interna, cartes, bancos de dados
Armazenamento de Dados
Escolha depende de necessidades
especficas da aplicao
Dados devem ser acessados somente por
uma aplicao
Espao necessrio

Etc
Modelos (I)

Shared preferences
Pares chave/valor, primitivos
Armazenamento interno
Dados privativos na memria do dispositivo
Armazenamento externo
Dados pblicos em armazenamento externo
compartilhado
Modelos(II)

Bancos de dados SQLite


Tabelas estruturadas com acesso via sql
Armazenamento em cartes
Dados pblicos
Armazenamento remoto
Conexes em rede, web-services, cloud
Preferncias
Par com chave e valor
Key/value
Semelhante a java.util

Tipos primitivos
Pode ser compartilhada ou privativa
SharedPreferences ou Preferences
Preferncias
Dados se mantm persistidos ao longo
de sesses do usurio
Mesmo que sua aplicao seja terminada
Para uso intensivo, usar a classe
PreferenceActivity
Activty com persistncia automtica de
valores
Usa SharedPreferences
Preferncias
Obter um objeto SharedPreferences ou
Preferences
getSharedPreferences(nomeDoArq,modo)
Nome do arquivo de preferncias
Modo de abertura, 0 default e mantm
privativo
getPreferences()
Somente modo de abertura, j que existe
somente um arquivo por aplicao
Preferncias
Os valores para o modo podem ser:
MODE_PRIVATE
O arquivo criado pode ser acessado somente
pela aplicao que o criou (ou todas as
aplicaes com o mesmo id)
MODE_WORLD_READABLE
Todas as aplicaes tem acesso a leitura do
arquivo
MODE_WORLD_WRITEABLE
Todas as aplicaes tem acesso de gravao
no arquivo
Preferncias
Gravar valores
Mtodo edit() para obter um Editor
Mtodos putXxxx e getXxxx em Editor

Gravar com commit() em Editor

Ler valores
Mtodos getXxxx da classe Preferences ou
SharedPreferences
Preferncias
Exemplo:
// salvar
SharedPreferences pref1 = getSharedPreferences("pref1",0);
Editor editor = pref1.edit();
editor.putString("valor", valor da preferencia);
editor.commit();

// ler
SharedPreferences pref1 = getSharedPreferences("pref1",0);
String vr1 = pref1.getString("valor", "---");
Preferncias
Ver a aplicao ExemploPref01 que faz uma
simulao para gravar dados digitados do nome
do jogador e a pontuao.
Armazenamento Interno
Arquivos salvos diretamente no armazenamento
interno do dispositivo
Arquivos genricos, sem tipo pr-definido
Acesso permitido somente a aplicao que os criou
Se aplicao desinstalada, remove os arquivos
Modelo de funcionamento baseado em java.io
Streams para gravao em bytes
FileInputStream e FileOutputStream
Armazenamento Interno
Criar e gravar arquivo
Mtodo openFileOutput() com o nome do arquivo e modo de
operao
Mtodo retorna objeto FileOutputStream
Existem quatro modos de operao:
MODE_PRIVATE somente a aplicao que criou o arquivo pode manipula-lo
MODE_APPEND Se o arquivo j existe, escreve os prximos bytes no final do
texto existente.
MODE_WORLD_READABLE qualquer aplicao pode ler este arquivo
MODE_WORLD_WRITEABLE qualquer aplicao pode escrever no arquivo.

Usar write() para gravar bytes no arquivo


Armazenamento Interno
Abrir e ler arquivo
Mtodo openFileInput() com nome do arquivo
Mtodo retorna objeto FileInputStream
Ler bytes com mtodo read()
Sempre fechar com close()
Armazenamento Interno
Mtodos teis da classe Context
getFilesDir()
Caminho absoluto do diretrio onde arquivos internos so
gravados
getDir()
Cria (ou abre) um diretrio no armazenamento interno
deleteFile()
Apaga arquivo salvo
fileList()
Retorna array de arquivos salvos pela aplicao corrente
Armazenamento Interno

Vamos analisar o projeto


ExemploArmazenamento01
Armazenamento Interno
Acesse o ambiente DDMS e no diretrio
data/data/nomeDaSuaAplicao atravs
da aba File Explore
Acesse o diretrio files e visualize os
arquivos que voc criou
Armazenando Dados
Temporrios
Em algumas situaes o programador precisar
guardar dados de forma temporrio em uma
aplicao
Para fazer isso deve-se utilizar o mtodo
getCacheDir()
Ao utilizar este diretrio tenha cuidado pois o Android
remove os arquivos que esto cache para liberar espao
Procure manter os arquivos com tamanho entre 512KB e
1MB.
Quando o aplicativo for desinstalado os arquivos so
excludos tambm.
Armazenando Dados
Temporrios

Alteramos o projeto
ExemploArmazenamento01 para
ExemploArmazenamento02 para
usar a diretrio de cache
Armazenamento Externo
Dispositivos android suportam espao de
armazenamento externo compartilhado
Usado para armazenar arquivos em geral
Pode ser uma mdia removvel ou no

Podem ser lidos e modificados pelo usurio


quando o dispositivo habilita modo de USB
mass storage
Possuem diretrios especficos para imagens,
ringtones, msicas, etc
Constantes da classe Environment
Armazenamento Externo
Aplicao dever ter permisso para acessar
armazenamento
Arquivo manifesto
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STOR
AGE" />

Antes de executar qualquer operao, importante


verificar o estado da mdia
getExternalStorageState()
Mounted * Missing
Read-only * Outro estado
Verificando Armazenamento
Externo
boolean mExtStorageAvailable = false;
boolean mExtStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// storage pode ser lido e gravado
mExtStorageAvailable = mExtStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// storage s pode ser lido
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// storage tem outros estados, no acessvel
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
Acessando Arquivos
Mtodo getExternalFilesDir()
Retorna um objeto da classe File
representando o diretrio
Nome do diretrio como parmetro

Constantes da classe Environment para


diretrios padronizados
DIRECTORY_DOWNLOADS
DIRECTORY_MUSIC
DIRECTORY_RINGTONES
DIRECTORY_MOVIES
DIRECTORY_PICTURES
Etc
Acessando Arquivos
Mtodo getExternalFilesDir()
Cria o diretrio, se necessrio
Especificar o tipo auxilia o media scanner do
Android
Se a aplicao desinstalada, o diretrio
e/ou seu contedo apagado
Acessando Arquivos
Mtodo
getExternalStoragePublicDirectory()
Semelhante ao anterior
Arquivos se mantm aps desinstalao da
aplicao
Acessando Arquivos
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
try {
File dir=
getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File arquivo1 = new File(dir, "arquivo.txt");
FileOutputStream out = new FileOutputStream(arquivo1);
out.write(texto.getBytes());
out.close();
Toast.makeText(this, "Arquivo gravado com sucesso",
Toast.LENGTH_SHORT).show();
} catch (IOException io1) { }
}
Acessando Arquivos
Vamos analisar o aplicativo
ExemploAramazenamento03.
Dvidas ??