Você está na página 1de 5

5 MANEIRAS DE ARMAZENAR DADOS EM APLICAES ANDROID

O Android fornece diversas opes para voc salvar dados de sua aplicao. A soluo escolhida depende de sua necessidade, como se os dados devem ser privados para sua aplicao ou devem ser acesssiveis para outras aplicaes (e para o usurio) e quanto espao seus dados precisam. Suas opes de armazenamento de dados so as seguintes: Shared Preferences Armazena dados primitivos provados em pares chave-valor. Internal Storage Armazena dados privados na memria do dispositivo. External Storage Armazena dados pblicos no carto de memria. SQLite Databases Armazena dados estruturados num banco de dados privado. Network Connection Armazena dados na web no seu servidor de rede. O Android fornece uma maneira para que voc possa expor seus dados privados para outras aplicaes com um content provider. Um content provider um componente opcional que permite o acesso de leitura e escrita aos dados de sua aplicao, sujeito s restries impostas por voc.

USANDO SHARED PREFERENCES A classe

SharedPreferences fornece um framework geral que permite que voc salve e recupere pares

de chave-valor de tipos de dados primitivos. Voc pode usar SharedPreferences para salvar qualquer tipo primitivo: boolean,floats, ints, longs, e strings. Esses dados sero persistentes entre sesses (mesmo que sua aplicao seja encerrada). Para obter um objeto SharedPreferences para sua aplicao, use um dos dois metdos:

getSharedPreferences() Use esse metdo se voc precisar de mltiplos arquivos getPreferences() Use esse metdo de voc possuir um nico arquivo para sua Activity. Por

identificados por nome, que voc deve especificar no primeiro parametro. existir um nico arquivo, voc no precisa fornecer um nome. Para escrever valores:

1. 2. 3.

edit() para obter um SharedPreferences.Editor. putBoolean(), putString(), etc. Salve os novos valores com commit()
Chame Adicione valores com os metdos

Para ler os valores, use os metdos correspondentes de SharedPreferences como getBoolean() e getString(). Abaixo segue um exemplo que salva uma preferncia para definir o modo de tecla silenciosa em uma calculadora: public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){

super.onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // We need an Editor object to make preference changes. // All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Commit the edits! editor.commit(); } }

USANDO O ARMAZENAMENTO INTERNO Voc pode salvar arquivos diretamente na memria interna do dispositivo. Por padro, arquivos salvos na memria interna so privados a sua aplicao e outras aplicaes no podem acess-las (nem o usurio). Quando o usurio desinstala a aplicao, esses arquivos so removidos. Para criar e escrever um arquivo na memria interna siga os passos:

1.
retorna um

2. 3.
Por examplo:

openFileOutput() com o nome do arquivo e o modo de operao. Isso FileOutputStream. Escreva no arquivo com write(). Encerre o fluxo de dados com close().
Chame

String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close();

MODE_PRIVATE criar um arquivo novo (ou subscrever um arquivo de mesmo nome) e tornar ele privado para sua aplicao. Os outros modos disponveis so MODE_APPEND, MODE_WORLD_READABLE, e MODE_WORLD_WRITEABLE.
Para ler um arquivo localizado na memria interna:

1.

Chame openFileInput() e passe o nome do arquivo. Isso ir retorna FileInputStream. 2. Leia bytes desse arquivo com read(). 3. Quando terminar, encerre o fluxo de dados com close(). um Dica: Se voc quiser salvar um arquivo esttico em sua aplicao durante a compilao, salve o arquivo em seu diretrio res/raw/. Voc poder abri-lo com o metdo

openRawResource(), passando o ID

R.raw.<filename>. Esse metdo retorna umInputStream que voc pode usar para acessar o contedo do arquivo (mas no poder escrever no arquivo original).

Salvando arquivo de cache


Se voc quiser armazenar alguma informao em cache, ao invs de armazena-las de modo persistente, deve usar

getCacheDir() para abrir umFile que representa o diretrio interno onde sua aplicao ir salvar

arquivos de cache temporrios. Quando o dispositivo estiver com pouco espao de memria, o Android pode deletar esses arquivos de cache para recuperar o espao. Porm, voc no deveria deixar o sistema limpar esses arquivos para voc. Voc deveria sempre manter os seus arquivos de cache e deixa-los dentro de um limite de espao razoavel, algo em torno de 1mB. Quando o usurio desinstala a aplicao, esses arquivos so removidos.

Outros metdos teis


getFilesDir()
Obtm o caminho absoluto do diretrio onde seus arquivos esto salvos.

getDir()
Cria (ou abre se existir) um diretrio na memria interna.

deleteFile()
Apaga um arquivo salvo na memria interna.

fileList()
Retorna uma lista de arquivos salvos por sua aplicao.

USANDO A MEMRIA EXTERNA Os dispositivos compativeis com o Android suportam o uso de memrias externas onde voc pode salvar arquivos. Essa memria pode ser uma mdia de armazenamento removvel (como um cart SD) ou uma memria interna (no-removvel). Os arquivos salvos na memria externa podem ser lidos por qualquer outro dispositivo ou aplicao e podem ser modificados pelo usurio quando ele ativar a transferncia USB ao conectar o dispositivo com um computador. Cuidado: Arquivos armazenados na memria externa pode disaparecer se o usurio montar a mdia em um computador ou remover o carto, e no existe nenhuma medida de segurana sobre os arquivos salvos nesse tipo de memria. Todas as aplicaes podem ler e escrever arquivos localizados em memrias externas e o usurio pode remove-los.

Verificando a disponibilidade da mdia


Antes que voc possa executar qualquer ao com a memria externa, deve sempre chamar

getExternalStorageState() para verificar que a mdia esta disponvel. A mdia pode estar

montada em um computador, no estar presente, montado como somente leitura, ou em algum outro estado. Por exemplo, abaixo segue uma maneira de verificar a disponibilidade da memria externa: boolean mExternalStorageAvailable = false; boolean mExternalStorageWriteable = false; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media mExternalStorageAvailable = mExternalStorageWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media mExternalStorageAvailable = true; mExternalStorageWriteable = false; } else {

// Something else is wrong. It may be one of many other states, but all we need // } Esse exemplo verifica se a memri externa est disponivel para leitura e escrita. O metdo to know is we can neither read nor write mExternalStorageAvailable = mExternalStorageWriteable = false;

getExternalStorageState() retorna outros estados que talvez voc queira checar, como se

a mdia est sendo compartilhada com um computador, se no est presente no dispositivo, se foi removida de forma no segura, etc. Voc pode usar essas checagens para fornecer ao usurio informaes completar no momento que sua aplicao precisar usar a mdia.

Acessando arquivos na memria externa


Se voc estiver usando a API no nvel 8 ou superior, usegetExternalFilesDir() para abrir umFile que representa o diretrio da memria externa onde voc quer salvar seus arquivos, Esse metdo pede um parametro type que especifica o tipo de diretrio que quer criar, comoDIRECTORY_MUSIC e

DIRECTORY_RINGTONES (passe o valor null para obter a raiz do diretrio

de arquivos de sua aplicao). Esse metdo criar os diretrios apropriados se necessrio. Especificando o tipo de diretrio, voc garante que o scanner de mdia do Android ir classificar corretamente seus arquivos no sistema (por exemplo, ringtones sero identificados como ringtones e no msica). Se o usurio desinstalar sua aplicao, esse diretrio e todo o seu contedo ser removido. Se estiver usando a API no nvel 7 ou inferior, usegetExternalStorageDirectory(), para abrir um

File que represente a riz da memria externa. Voc ir escrever seus dados no seguinte diretrio:

/Android/data/<package_name>/files/ O nome <package_name> o nome do seu pacote, como em com.example.android.app. Se o dispositivo do usurio estiver rodando a API nvel 8 ou superior e a sua aplicao for desinstalada, esse diretrio e todo o seu contedo ser removido.

Salvando arquivos que devem ser compartilhados


Se voc quiser salvar arquivos que no sejam especficos a sua aplicao e que no devem ser apagados quando sua aplicao for desinstalada, salve-os em um dos diretrios pblicos da memria externa. Esses diretrios ficam na raiz da memria externa, como Music/, Pictures/, Ringtones/ e outros. Se estiver usando a API nvel 8 ou superior, usegetExternalStoragePublicDirectory(), passando o tipo de diretrio pblico que voc quiser, como

DIRECTORY_MUSIC, DIRECTORY_PICTURES,DIRECTORY_RINGTONES, ou outros. Esse

metdo ir criar o diretrio apropriado se necessrio. Se estiver usando a API nvel 7 ou inferior, usegetExternalStorageDirectory() para abrir um

File que represente a raiz da memria externa, e ento salve seus arquivos em um dos diretrios Music/ Podcasts/ Ringtones/ Alarms/ Notifications/ Pictures/ Movies/ Download/

abaixo:

Salvando arquivos de cache


Se voc estiver usando a API nvel 8 ou superior, usegetExternalCacheDir() para abrir um

File que represente o diretrio da memria externa onde voc ir salvar seus arquivos de cache. Se o

usurio desinstalar sua aplicao, esses arquivos sero automaticamente removidos. Porm, durante o ciclo de

vida de sua aplica0, voc deve gerenciar esses arquivos de cache e remov-los quando no forem necessrios para liberar espao na memria. Se estiver usando a API nvel 7 ou inferior, usegetExternalStorageDirectory() para abrir um

File que representa a raiz da memria externa, ento escreva os dados de cache no seguinte diretrio:

/Android/data/<package_name>/cache/ O <package_name> o nome do pacote, como com.example.android.app.

USANDO BANCO DE DADOS O Android fornece suporte completo a banco de dados SQLite. Qualquer banco de dados que voc criar ser acessvel pelo nome por qualquer classe da aplicao, mas no fora da aplicao. O metdo recomendado para criar um novo banco de dados SQLite criar uma sub-classe de SQLiteOpenHelper e sobrecarregar o metdo

onCreate(), onde voc poder executar um comando

SQLite para criar tabelas no banco de dados. Por exemplo: public class DictionaryOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 2; private static final String DICTIONARY_TABLE_NAME = "dictionary"; private static final String DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" + KEY_WORD + " TEXT, " + KEY_DEFINITION + " TEXT);"; DictionaryOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DICTIONARY_TABLE_CREATE); } } Voc pode ento obter uma instncia de sua implementao SQLiteOpenHelper

usando o construtor que voc definiu. Para escrever e ler do banco de dados, chame getWritableDatabase() egetReadableDatabase(), respectivamente. Ambas retornam um objetoSQLiteDatabase que representa o banco de dados e fornece metdos para operaes
SQLite. Voc pode executar consultaas SQLite usando os metdos

SQLiteDatabasequery(), que aceitam

vrios parmetros de consulta, como a tabela de query, projees, selees, colunas, grupos e outros. Para queries complexas, como aquelas que requerem aliases de colunas, voc deve usarSQLiteQueryBuilder, que fornece muitos metdos convenientes para a construo de queries. Cada query SQLite retorna um O

Cursor que aponta para todos os campos encontrados pela query. Cursor sempre o mecanismo com o qual voc pode navegar pelos resultados da query e ler os campos e

colunas.

USANDO UMA CONBEXO DE REDE Voc pode usar a rede (quando disponvel) para armazenar e recuperar dados de seus servios baseados e web. Para executar operaes de rede, use classes dos seguintes pacotes:

java.net.* android.net.*

Traduzido de developer.android.com

Você também pode gostar