Meu primeiro documento sobre a tecnologia. É um pequeno relatório tratando de modo geral as formas de armazenamento de informações no desenvolvimento para o Android.
2. 1. ARMAZENAMENTO DE DADOS
O Android oferece várias opções para você armazenar dados de uma
aplicação. A melhor solução depende das suas necessidades específicas.
Essas necessidades variam entre segurança de dados, isto é, se os dados
devem ser privados ou acessíveis para outras aplicações ou também quanto
espaço seus dados requerem. As opções de armazenamento são:
Shared Preferences
Armazena dados primitivos. É voltada para guardar dados de
configuração.
Internal Storage
Armazena dados na memória interna do dispositivo, de forma privada.
External Storage
Armazena dados na memória externa do dispositivo (Cartão SD), de
forma pública.
SQLite Databases
Armazena dados estruturados, em um banco de dados próprio, onde
podem ser criadas estruturas mais complexas que os outros métodos, com
maior quantidade de dados.
Network Connection
É usada para guardar dados em um servido de rede.
1. 1. Shared Preferences
Tem como objetivo armazenar dados mais simples, salvando informações
como variáveis (booleans, floats, ints, longs e strings).
A aplicação é bem simples, devemos restaurar os dados gravados quando
iniciar a aplicação e gravar os dados quando finalizarmos a aplicação. Segue
uma implementação:
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();
3. // 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();
}
}
1. 2. Internal Storage
Dessa forma, os dados são privados e não permite que sejam acessados
de qualquer maneira. Segue uma implementação simples:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME,
Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
1. 2. 1. Cache
Se você gostaria de gravar alguns dados em cache, ao invés de
armazená-lo persistentemente, você deve usar o método getCacheDir()
para abrir um arquivo que representa o diretório interno onde a sua aplicação
deve salvar os arquivos de cache temporário.
Quando o dispositivo está com pouco espaço de armazenamento
interno, o Android pode excluir esses arquivos de cache para recuperar
espaço. No entanto, você não deve confiar no sistema para limpar esses
arquivos para você.
Você deve sempre manter os arquivos de cache e manter dentro de um
limite razoável de espaço consumido, como 1MB. Quando o usuário desinstala
o aplicativo, esses arquivos são removidos.
Outros métodos uteis:
getFilesDir()
Pega o caminho absolute do diretório onde os arquivos estão salvos.
getDir()
Cria (ou abre, se existir) um diretório dentro de seu espaço de
armazenamento interno.
deleteFile()
Deleta um arquivo salvo na memória interna.
fileList()
Retorna um array de arquivos salvos pela sua aplicação.
4. 1. 3. External Storage
Cada dispositivo suporta um "armazenamento externo" compartilhado que
você pode usar para salvar arquivos. Pode ser uma mídia de armazenamento
removível (como um cartão SD) ou a memória interna (não removível).
Os arquivos salvos no armazenamento externo são de leitura e podem ser
modificados pelo usuário quando é ativado o armazenamento em massa USB
para transferir arquivos de um computador.
Verificando disponibilidade de mídia
Antes de fazer qualquer trabalho, você deve verificar se o meio está
disponível. Segue um código para fazer essa verificação:
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
// to know is we can neither read nor write
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
1. 4. SQLite Databases
O método recomendado para criar um novo banco de dados SQLite é criar
uma subclasse de SQLiteOpenHelper e substituir o método onCreate(), no qual
você pode 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);
}
}
5. Os principais comandos são:
SQLiteDatabase db;
openOrCreateDataBase(nome, modo, fabrica);
db.insert(tabela, nullColumnHack, valores);
db.update(tabela, valores, where, whereArgs[]);
Cursor c = db.query(distinct, tabela, colunas[], selecao[],
selecaoArgs[], groupBy, orderBy);
1. 5. Network Connection
A última forma é usando uma conexão de rede (quando disponível) para
armazenar e recuperar dados sobre seus próprios serviços na web. Para isso,
use as seguintes classes:
import java.net.*;
import android.net.*;
6. REFERENCIAS BIBLIOGRÁFICAS
Android Developers – Data Storage. Disponível em:<
http://developer.android.com/guide/topics/data/data-storage.html#netw> Acesso
em: 20 jun. 2012.
Henrique Lacerda – Um blog sobre desenvolvimento para Android e para
outras coisas também. Como gravar dados no Android – Parte I. Disponível
em:<http://www.henriquelacerda.com.br/2011/12/22/gravando-dados-parte-i/>
Acesso em: 20 jun. 2012.
Henrique Lacerda – Um blog sobre desenvolvimento para Android e para
outras coisas também. Como gravar dados no Android – Parte II. Disponível
em:<http://www.henriquelacerda.com.br/2012/01/03/como-gravar-dados-no-
android-parte-ii/> Acesso em: 20 jun. 2012.
Henrique Lacerda – Um blog sobre desenvolvimento para Android e para
outras coisas também. Como gravar dados no Android – Parte III – Banco de
Dados SQLite. Disponível
em:<http://www.henriquelacerda.com.br/2012/03/30/como-gravar-dados-no-
android-parte-iii-banco-de-dados-sqlite/> Acesso em: 20 jun. 2012.
LECHETA, Ricardo R. Google ANDROID: aprenda a criar aplicações para
dispositivos moveis com o Android SDK / Ricardo R. Lecheta – 2. Ed. rev. E
ampl. – São Paulo: Novatec Editora, 2010.