Buscar

Trabalho Persistencia de Dados

Prévia do material em texto

Centro Universitário Estácio/Fic
Análise e Desenvolvimento de Sistemas
Programação para Dispositivos Moveis – Milton Escóssia
Aluno: Jonathan Willian dos Santos Melo – Matricula: 201401129463
Estudo da utilização do Content Provider em conjunto com SQlite como solução de persistência de dados da App Android Assistente Financeiro.
Para compreendermos melhor a utilização do contente provider em conjunto com o Sqlite, vamos destacar o conceito e a utilidade de cada um na programação para Android.
O Content Provider é um recurso disponibilizado pelo Android para permitir o compartilhamento de dados entre diferentes aplicações. Isso se faz necessário porque o Android não possui um local comum para guardar os dados das aplicações e compartilhá-los entre todos os pacotes Android. Tal recurso se trata de uma abstração das fontes de dados de camadas inferiores (Exemplo: banco de dados SQLite), além de disponibilizar mecanismos de segurança de dados, como controle de permissão de leitura e escrita de dados, e disponibilizar uma interface padrão para compartilhar dados entre aplicações. Cada Content Provider possui um caminho único. O modelo de dados utilizado pelo Content Provider é como uma simples tabela de banco de dados, onde cada linha é um registro e cada coluna são os dados de um tipo particular.
O SQLite é uma biblioteca C que implementa um banco de dados SQL embutido. Programas que usam a biblioteca SQLite podem ter acesso a banco de dados SQL sem executar um processo RDBMS separado.
SQLite não é uma biblioteca de cliente usada para conectar com um grande servidor de banco de dados. SQLite é o servidor. A biblioteca SQLite lê e escreve diretamente para e do arquivo do banco de dados no disco.
O uso do SQLite é recomendado onde a simplicidade da administração, implementação e manutenção são mais importantes que incontáveis recursos que SGBDs mais voltados para aplicações complexas possivelmente implementam. Entretanto situações onde a simplicidade é a melhor escolha são muito mais frequentes do que pode-se imaginar.
Exemplos de uso do SQLite são, não restrito a, sites (com menos de cem mil requisições por dia), dispositivos e sistemas embarcados, aplicações desktop, ferramentas estatísticas e de análise, aprendizado de banco de dados, implementação de novas extensões à SQL. Não se recomenda o uso do SQLite para sites com muitos acessos, grandes quantidades de dados (talvez maior que algumas dúzias de gigabytes), sistemas com grande concorrência, aplicações cliente/servidor.
Algumas características do SQLite:
. Software livre/domínio público e Multiplataforma;
. Mecanismo de armazenamento seguro com transações ACID;
. Não necessita de instalação, configuração ou administração;
. Implementa a maioria do SQL92;
. O Banco de Dados é guardado em um único arquivo;
. Suporta bases de dados acima de 2 terabytes;
. Sem dependências externas.
Para criar um Content Provider em memória secundária usando o Banco SQLite nativo no Android. A interface de Content Provider demanda implementação de alguns métodos, onde alguns deles destacamos:
query(Uri, String[], String, String[], String)- usado para recuperar dados.
insert(Uri, ContentValues) – usado para inserir dados.
update(Uri, ContentValues, String, String[]) – usado para atualizar dados.
delete(Uri, String, String[]) – usado para deletar dados.
Observe que o parâmetro URI está presente em todos os métodos. Uma URI é o que determina identidade de um provedor de dados. Por exemplo, a URI “content://sms/inbox” pode ser usada para acessar as mensagens contidas no inbox do dispositivo. O aplicativo exemplificado será um assistente financeiro abordado em sala de aula com tela inicial com resumo dos valores por categoria: Despesa, receita e investimento. Tela com lista dos lançamentos financeiros ordenados por data de lançamento. Tela de Cadastro do evento financeiro.
A classe de Banco de dados deve herdar a classe SQLiteOpenHelper e os métodos onCreate() e onUpgrade() devem ser chamados. Na primeira vez que essa classe é executada (após a instalação do aplicativo) o método onCreate() é chamado. Sua implementação consiste em criar o banco de dados. Em caso de reinstalação do aplicativo o método onUpgrade() é chamado. Nessa implementação, decidiu-se eliminar o banco de dados já existente.
A implementação da classe Sqlite
	01
	public class ImobilisDataBase extends SQLiteOpenHelper {
	02
	 
	03
	  public ImobilisDataBase(Context context) {
	04
	     super(context, DB_NAME, null, DB_VERSION);
	05
	  }
	06
	 
	07
	  private static final String TAG = "TutListDatabase";
	08
	  private static final int DB_VERSION = 1;
	09
	  private static final String DB_NAME = "imobilis_data";
	10
	 
	11
	  public static final String TABLE_CONTACTS = "contact_mail";
	12
	  public static final String ID = "_id";
	13
	  public static final String COL_NAME = "name";
	14
	  public static final String COL_MAIL = "mail";
	15
	  private static final String CREATE_TABLE_TUTORIALS = "create table " + TABLE_CONTACTS
	16
	  + " (" + ID + " integer primary key autoincrement, " + COL_NAME
	17
	  + " text not null, " + COL_MAIL + " text not null);";
	18
	 
	19
	  @Override
	20
	  public void onCreate(SQLiteDatabase db) {
	21
	    db.execSQL(CREATE_TABLE_TUTORIALS);
	22
	  }
	23
	 
	24
	  @Override
	25
	  public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
	26
	    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
	27
	    onCreate(db);
	28
	  }
	29
	}
Essa classe contém atributos com propriedades de banco e da tabela que está sendo usada. A tabela chama-se “contact_mail” e possui “_id”, “name” e “mail” como atributos.
Classe Content Provider
Essa classe deverá herdar Content Provider e implementar os métodos conforme mencionado anteriormente. Os principais atributos dessa classe são “mDB” do tipo ImobilisDataBase no qual corresponde ao objeto de manipulação do banco. Uma String “AUTHORITY” usada para formação da URI e outra String “CONTENT_BASE_PATH” na qual irá definir o caminho da tabela.
A listagem 2 mostra a implementação da classe contente provider
	01
	</pre>
	02
	public class ImobilisContentProvider extensa ContentProvider{
	03
	 
	04
	 private ImobilisDataBase mDB;
	05
	 
	06
	 private static final String AUTHORITY = "com.example.imobiliscontentprovider";
	07
	 private static final String CONTACTS_BASE_PATH = "contacts";
	08
	 public static final int CONTACTS_CODE = CONTACTS_BASE_PATH.hashCode();
	09
	 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
	10
	 + "/" + CONTACTS_BASE_PATH);
	11
	 
	12
	 private static final UriMatcher sURIMatcher = new UriMatcher(
	13
	 UriMatcher.NO_MATCH);
	14
	 static {
	15
	 sURIMatcher.addURI(AUTHORITY, CONTACTS_BASE_PATH, CONTACTS_CODE);
	16
	 }
	17
	 @Override
	18
	 public boolean onCreate() {
	19
	    mDB = new ImobilisDataBase(getContext());
	20
	    return true;
	21
	 }
	22
	 
	23
	 @Override
	24
	 public int delete(Uri uri, String where, String[] whereas) {
	25
	    SQLiteDatabase db = mDB.getWritableDatabase();
	26
	 
	27
	    int count = db.delete(ImobilisDataBase.TABLE_CONTACTS, where, whereArgs);
	28
	 
	29
	    getContext().getContentResolver().notifyChange(uri, null);
	30
	 
	31
	    return count;
	32
	 }
	33
	 
	34
	@Override
	35
	 public String getType(Uri uri) {
	36
	   // TODO Auto-generated method stub
	37
	   return null;
	38
	 }
	39
	 
	40
	@Override
	41
	 public Uri insert(Uri uri, ContentValues values) {
	42
	 
	43
	   if (sURIMatcher.match(uri) != CONTACTS_CODE) {
	44
	     throw new IllegalArgumentException("Unknown URI " + uri);45
	   }
	46
	 
	47
	   SQLiteDatabase db = mDB.getWritableDatabase();
	48
	   long rowId = db.insert(mDB.TABLE_CONTACTS, ImobilisDataBase.COL_NAME, values);
	49
	   if (rowId > 0) {
	50
	     Uri uriContact = ContentUris.withAppendedId(CONTENT_URI, rowId);
	51
	     getContext().getContentResolver().notifyChange(uriContact, null);
	52
	     return uriContact;
	53
	   }
	54
	   return null;
	55
	 }
	56
	 
	57
	&nbsp;
	58
	 
	59
	@Override
	60
	 public Cursor query(Uri uri, String[] projection, String selection,
	61
	   String[] selectionArgs, String sortOrder) {
	62
	   SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
	63
	   queryBuilder.setTables(ImobilisDataBase.TABLE_CONTACTS);
	64
	 
	65
	   queryBuilder.appendWhere(ImobilisDataBase.ID + "="
	66
	   mais uri.getLastPathSegment());
	67
	 
	68
	   Cursor cursor = queryBuilder.query(mDB.getReadableDatabase(),
	69
	   projection, selection, selectionArgs, null, null, sortOrder);
	70
	   cursor.setNotificationUri(getContext().getContentResolver(), uri);
	71
	   return cursor;
	72
	 }
	73
	 
	74
	@Override
	75
	 public int update(Uri uri, ContentValues values, String selection,
	76
	   String[] selectionArgs) {
	77
	    return 0;
	78
	 }
	79
	 
	80
	}
	81
	<pre>
Por fim é necessário declarar o provider criado no manifiest da aplicação
	1
	</pre>
	2
	<provider android:name=<em>"com.example.imobiliscontentprovider.contentprovider"</em> android:authorities=<em>" com.example.imobiliscontentprovider.contentprovider"</em> />
	3
	<pre>
Mostramos como criar um Content Provider no Android para persistência em banco de dados usando SQLite.

Continue navegando