Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Código de um ContentProvider para armazenar e gerenciar eventos, Notas de estudo de Engenharia de Telecomunicações

Neste documento, é apresentado um código de um contentprovider em java que armazena e gerencia eventos em um banco de dados sqlite. O contentprovider fornece uris para consultas, inserções, atualizações e exclusões de eventos. O código inclui classes para a definição de constantes, a implementação do contentprovider e a manipulação de eventos.

Tipologia: Notas de estudo

2017

Compartilhado em 31/10/2017

bruno-z36
bruno-z36 🇧🇷

4

(7)

54 documentos

1 / 35

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Provedores(de(Conteúdo(
Programação(para(a(Plataforma(Android(–(Aula(12(
O(que(são(provedores(de(conteúdo?(
Como(ler(dados(de(outras(aplicações?(
Como(iden@ficar(recursos(de(forma(única?(
Como(deixar(dados(disponíveis(para(outras(aplicações?(
Como(estabelecer(níveis(de(proteção(para(dados?(
Como(alterar(dados(de(outras(aplicações?(
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23

Pré-visualização parcial do texto

Baixe Código de um ContentProvider para armazenar e gerenciar eventos e outras Notas de estudo em PDF para Engenharia de Telecomunicações, somente na Docsity!

Provedores de Conteúdo

Programação para a Plataforma Android – Aula 12

  • O que são provedores de conteúdo?
  • Como ler dados de outras aplicações?
  • Como iden@ficar recursos de forma única?
  • Como deixar dados disponíveis para outras aplicações?
  • Como estabelecer níveis de proteção para dados?
  • Como alterar dados de outras aplicações?

Provedores de Conteúdo

  • Provedores de conteúdo são objetos que armazenam dados de forma permanente, e os tornam disponíveis para as outras aplicações.
  • Android já fornece alguns provedores de conteúdo no pacote android.provider
  • Existem duas formas de tornar dados públicos: extende‐se a classe ContentProvider, ou insere‐se os dados nalgum provedor já existente.

Uniform Resource Iden@fier (URI)

  • Provedores de conteúdo são localizados via URIs.
  • Cada @po de dado que o provedor disponibiliza é encontrado via uma URI diferente.
  • O mesmo provedor pode disponibilizar mais de um @po de dado, e portanto usar mais de uma URI. Exemplo: - android.provider.Contacts.Phones.CONTENT_URI - android.provider.Contacts.Photos.CONTENT_URI

URIs

  • A) Segmento que indica que o dado é fornecido por um provedor de conteúdo.
  • B) Iden@ficador do provedor de conteúdo.
  • C) Tipo (e sub@pos) do dado.
  • D) Iden@ficador de um registro qualquer dos dados. Pode estar ausente.

E outras constantes

import android.net.Uri; import android.provider.BaseColumns; public interface Constants extends BaseColumns { final String TABLE_NAME = "events"; final String AUTHORITY = "com.aula10"; final Uri CONTENT_URI = Uri.parse("content://”

  • AUTHORITY + "/" + TABLE_NAME); final String TIME = "Nme"; final String TITLE = "Ntle"; } Vale a^ pena definir também^ nomes para^ as^ colunas de dados^ como constantes . Esses nomes tendem a ser usados (^) o tempo todo!

Importação Está@ca

  • Esse @po de constante pode ser importada esta@camente. import sta@c com.aula12.Constants.AUTHORITY; import sta@c com.aula12.Constants.CONTENT_URI; import sta@c com.aula12.Constants.TABLE_NAME; import sta@c android.provider.BaseColumns. _ID ; Android já possui um nome predefinido para chaves (^) primárias .

Declarando a URI no Manifesto

_ _ _ **_ _ _ _ _

Estendendo ContentProvider

  • ContentProvider é uma classe abstrata, contendo seis métodos abstratos: - query() - insert() - update() - delete() - getType() - onCreate() public class EventsProvider extends ContentProvider { public int delete (Uri arg0, String arg1, String[] arg2) {} public String getType (Uri uri) {} public Uri insert (Uri uri, ContentValues values) {} public boolean onCreate () {} public Cursor query (Uri uri, String[] projec@on, String selec@on, String[] selec@onArgs, String sortOrder) {} public int update (Uri uri, ContentValues values, String selec@on, String[] selec@onArgs) {} } EventsProvider.java

onCreate

private sta@c final int EVENTS = 1; private sta@c final int EVENTS_ID = 2; private EventsData events; private UriMatcher uriMatcher; @Override public boolean onCreate() { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, "events", EVENTS); uriMatcher.addURI(AUTHORITY, "events/#", EVENTS_ID); events = new EventsData(getContext()); return true; } EventsProvider.java O que seria um UriMatcher ? E^ essa^ classe EventsData ?

query

@Override public Cursor query(Uri uri, String[] projec@on, String selec@on, String[] selec@onArgs, String orderBy) { if (uriMatcher.match(uri) == EVENTS_ID) { long id = Long.parseLong(uri.getPathSegments().get(1)); selec@on = appendRowId(selec@on, id); } SQLiteDatabase db = events.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, projec@on, selec@on, selec@onArgs, null, null, orderBy); cursor.setNo@fica@onUri(getContext().getContentResolver(), uri); return cursor; } EventsProvider.java

insert

@Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = events.getWritableDatabase(); if (uriMatcher.match(uri) != EVENTS) { throw new IllegalArgumentExcepNon ("Unknown URI " + uri); } long id = db.insertOrThrow(TABLE_NAME, null, values); Uri newUri = ContentUris.withAppendedId(CONTENT_URI, id); getContext().getContentResolver().noNfyChange(newUri, null); return newUri; } EventsProvider.java Por que disparamos essa exceção ? Qual o propósito dessa linha?

delete

@Override public int delete(Uri uri, String selec@on, String[] selec@onArgs) { SQLiteDatabase db = events.getWritableDatabase(); int count; switch (uriMatcher.match(uri)) { case EVENTS: count = db.delete(TABLE_NAME, selec@on, selec@onArgs); break; case EVENTS_ID: long id = Long.parseLong(uri.getPathSegments().get(1)); count = db.delete(TABLE_NAME, appendRowId(selec@on, id), selec@onArgs); break; default: throw new IllegalArgumentExcep@on("Unknown URI " + uri); } getContext().getContentResolver().no@fyChange(uri, null); return count; } EventsProvider.java

update

@Override public int update(Uri uri, ContentValues values, String selec@on, String[] selec@onArgs) { SQLiteDatabase db = events.getWritableDatabase(); int count; switch (uriMatcher.match(uri)) { case EVENTS: count = db.update(TABLE_NAME, values, selec@on, selec@onArgs); break; case EVENTS_ID: long id = Long.parseLong(uri.getPathSegments().get(1)); count = db.update(TABLE_NAME, values, appendRowId (selec@on, id), selec@onArgs); break; default: throw new IllegalArgumentExcep@on("Unknown URI " + uri); } getContext().getContentResolver().no@fyChange(uri, null); return count; } EventsProvider.java Mas,^ o^ que ele faz^ mesmo ? private String appendRowId(String selec@on, long id) { return _ID + "=" + id

  • (!TextU@ls.isEmpty(selec@on)? " AND (" + selec@on + ')' : ""); } E (^) como (^) podemos ter (^) acesso a um provedor (^) de conteúdo ?

Usando um provedor de conteúdo

  • São necessárias três informações para que possamos ler um provedor de conteúdo: - A URI que iden@fica o provedor - Os nomes dos campos que queremos ler ou escrever - O @po dos dados desses campos. Quais^ passos precisam ser tomados^ por^ uma atividade que^ lê nosso^ provedor ?