45
Desenvolvimento de Apps e Games para Android Por Erisvaldo Júnior. Parte 7 (04/10/2011)

Desenvolvimento de Apps e Games para Android - Parte 7

Embed Size (px)

Citation preview

Page 1: Desenvolvimento de Apps e Games para Android - Parte 7

Desenvolvimento de

Apps e Games para Android

Por Erisvaldo Júnior. Parte 7 (04/10/2011)

Page 2: Desenvolvimento de Apps e Games para Android - Parte 7

RECAPITULANDO…

Page 3: Desenvolvimento de Apps e Games para Android - Parte 7

URLConnection java.net.URL url = new java.net.URL(“http://developer.android.com");

java.net.URLConnection uc = url.openConnection(); BufferedReader br = new BufferedReader( new InputStreamReader ( uc.getInputStream() ) );

Faça uma aplicação que exiba o código-fonte de uma página qualquer cujo endereço é digitado em um EditText. OBS: Lembre-se de definir permissão de acesso à Internet no AndroidManifest.xml

Page 4: Desenvolvimento de Apps e Games para Android - Parte 7

URLConnection

Faça uma aplicação que acesse exemploget.php e mostre o retorno em um TextView.

Exemplo:

http://erisvaldojunior.com/exemploget.php?tipo=2

tipo=1 Retorno: Bom dia tipo=2 Retorno: Boa tarde tipo=3 Retorno: Boa noite

Default Retorno: Oi

Page 5: Desenvolvimento de Apps e Games para Android - Parte 7

ListView Provê uma lista de itens (com scrolling) provenientes de um Array/Lista ou de um banco de dados. ListView é abastecido através de um adaptador. Pode-se fazer seu próprio adaptador para determinar como os dados são lidos.

ArrayAdapter e CursorAdapter

• ArrayAdapter – trata dados baseados em Array ou Lists;

• SimpleCursorAdapter – trata dados provenientes de

um banco de dados SQLite.

Page 6: Desenvolvimento de Apps e Games para Android - Parte 7

ListActivity Classe base para uma Activity cujo objetivo é mostrar uma lista. Provê facilidades como um método predefinido para quando um usuário seleciona um elemento da lista. Contém um adaptador que deve ser setado no próprio metodo onCreate() da ListActivity. Isso é feito através do setListAdapter().

onListItemClick() – método de ListActivity chamado quando um item da lista é selecionado.

• Layouts Default – os itens da lista podem ter um layout padrão. Ex: android.R.layout.simple_list_item1;

• Layouts Personalizados – seu layout (XML) deve conter uma

ListView com o ID @android:id/list. Além disso, você pode ter um TextView @android:id/empty indicando lista vazia.

Page 7: Desenvolvimento de Apps e Games para Android - Parte 7

Exemplo 1 Criar uma lista de elementos com ListActivity + Array Adapter + Layout Default.

Page 8: Desenvolvimento de Apps e Games para Android - Parte 7

Exemplo 2 Criar uma lista de elementos com ListActivity + Array Adapter + Layout PERSONALIZADO.

• Modificar o código anterior para o ArrayAdapter utilizar o layout abaixo, apontando para o R.id.label.

rowlayout.xml

Page 9: Desenvolvimento de Apps e Games para Android - Parte 7

ListActivity com layout dinâmico Nos exemplos anteriores, o layout é o mesmo para todos os itens. É possível mudar a aparência de itens específicos de uma ListView criando o seu próprio adaptador, através do método getView() e da classe LayoutInflater.

MySimpleArrayAdapter extends ArrayAdapter

• getView(int position, View convertView, ViewGroup parent) – método que deve ser sobrecarregado para personalizar a aparência do item da lista.

Page 10: Desenvolvimento de Apps e Games para Android - Parte 7

Exemplo 3: Personalizar ícone de itens específicos da lista.

Page 11: Desenvolvimento de Apps e Games para Android - Parte 7

Exemplo 3: Depois, basta setar o adaptador criado no método onCreate() da ListActivity.

Page 12: Desenvolvimento de Apps e Games para Android - Parte 7

ListView, ListActivity e Adapters

Há muitas outras possibilidades!

• setOnItemLongClickViewListener() de ListView – apresenta o método onItemLongClick(), invocado quando o usuário mantém o dedo pressionado sobre um item;

• Seleção Múltipla; • Cabeçalho e rodapé; • SimpleCursorAdapter

• ContentProvider – exemplo: mostrar lista de contatos; • Banco de dados próprio (SQLite).

Page 13: Desenvolvimento de Apps e Games para Android - Parte 7

Roteiro da Aula

Bem vindo ao mundo da mobilidade

LEITOR DE

FEEDS

PARSER XML (TWITTER)

Page 14: Desenvolvimento de Apps e Games para Android - Parte 7

PARSER XML (TWITTER)

Page 15: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id –

Le

ito

r d

e R

SS Android Permissions

O Parser XML do Twitter precisa acessar a Internet.

Page 16: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

TwitterHandler Classe responsável por ler um arquivo XML e realizar o parsing do mesmo, obtendo o seu conteúdo. Para isso, faz-se uso da API SAX (Simple API for XML), nativa do Android SDK.

http://twitter.com/status/user_timeline/yupistudiosBR.xml ( @yupistudiosBR )

Page 17: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

TwitterHandler (Tweet) No arquivo XML, cada tweet deve ser lido através dos métodos startElement() , characters() e endElement() de DefaultHandler.

No arquivo XML, cada tweet está representado por uma tag <status>, possuindo um texto (<text>), uma data (<created_at>), contagem de retweets (<retweet_count>), entre outras informações.

Page 18: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

TwitterHandler (Parsing) A API SAX é bastante simples de ser utilizada. Basicamente, ao analisar o trecho <text>Texto do Tweet</text>, o Handler trabalha com a chamada de três métodos:

• startElement() – Essa função é chamada quando o parser encontra um elemento. No exemplo acima, startElement() é invocado com a passagem de “text” como parâmetro; • characters() – Chamada logo após o startElement() e antes de se encontrar o final do elemento. No exemplo acima, characters() é invocado com a passagem de “Texto do Tweet” como parâmetro; • endElement() – Chamada quando o parser encontra o final do elemento. No exemplo acima, endElement() é invocado após characters() com a passagem de “text” como parâmetro.

Page 19: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

TwitterHandler – SAXParser A partir de um SAXParserFactory, cria-se um XMLParser e, a partir deste, um XMLReader. Por fim, define-se o ContentHandler e então inicia-se o parsing. Em código:

Page 20: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

TwitterHandler – Técnica para leitura do XML Cria-se um StringBuffer no startElement(). No characters(), adiciona-se os caracteres ao StringBuffer criado. Por fim, no endElement(), verifica-se a tag que foi lida e a informação é repassada para a variável desejada.

Dessa forma, quando o endElement() é chamado, descobre-se em que tag o parser se encontra e, então, basta passar o conteúdo do StringBuffer para a variável desejada. No endElement(), uma vez que o tweet atual já foi lido, pode-se armazenar os dados em um banco de dados, se desejar.

Page 21: Desenvolvimento de Apps e Games para Android - Parte 7

O que tudo isso possibilita?

Criar um “cliente” de Twitter (apenas leitura)!

• Campo de texto para adicionar o nome do usuário – @yupistudiosBR , @yupistudios , @erisvaldojunior , etc;

• ListView para exibir os tweets daquele usuário; • O ListView pode ser personalizado com imagens; • Podem ser mostrados: data/hora do Tweet, quantidade de

retweets e informações extras.

Page 22: Desenvolvimento de Apps e Games para Android - Parte 7

LEITOR DE FEEDS

Page 23: Desenvolvimento de Apps e Games para Android - Parte 7

Leitor de Feeds do LazerJP

Page 24: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id –

Le

ito

r d

e R

SS Estrutura do aplicativo (MVC)

O aplicativo Leitor de Feeds consiste de seis classes:

Classes de modelo:

• Evento – entidade que armazena os dados de um evento: id, titulo, descrição e url;

Classes de visão:

• SplashActivity – Splash Screen; • EventosListActivity – Tela com a lista de eventos; • EventosListAdapter– Adaptador com as informações que preenchem a lista.

Classes de controle:

• EventosReader – efetua a leitura do feed, usando o Handler para fazer o parsing e, em seguida, preenche a lista; • EventosHandler – faz o parsing do Feed (XML) para obtenção de cada evento.

Page 25: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id –

Le

ito

r d

e R

SS ListActivity

A lista de Feeds ou Artigos pode ser facilmente exibida por meio de uma especialização de Activity, o ListActivity.

Trata-se de um Activity que mostra uma lista de itens associados a uma fonte de dados, como um array ou um Cursor. Além disso, disponibiliza tratadores de eventos para quando o usuário seleciona um item. O conteúdo do ListActivity é associado através do método setListAdapter() que recebe como parâmetro uma classe que implementa a interface ListAdapter. Pode ser um ArrayAdapter, um SimpleAdapter (Map) ou um SimpleCursorAdapter (Cursor).

Page 26: Desenvolvimento de Apps e Games para Android - Parte 7

ListActivity

public class EventosActivity extends ListActivity

Layout de uma ListActivity deve conter um <ListView>

Page 27: Desenvolvimento de Apps e Games para Android - Parte 7

ListAdapter

Page 28: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

EventosHandler Classe responsável por ler um RSS (arquivo XML) e realizar o parsing do mesmo, obtendo o seu conteúdo. Para isso, faz-se uso da API SAX (Simple API for XML), nativa do Android SDK.

Page 29: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

EventosHandler (Evento) No arquivo XML, cada artigo deve ser lido através dos métodos startElement() , characters() e endElement() de DefaultHandler.

No arquivo XML, cada evento está representado por uma tag <item>, possuindo um título (<title>), uma URL (<link>), uma descrição (equivalente ao conteúdo do artigo e representada pela tag <description>), URL de comentários (<comments>), data de publicação (<pubDate>) e o criador (<dc:creator).

Page 30: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

EventosHandler (Parsing) A API SAX é bastante simples de ser utilizada. Basicamente, ao analisar o trecho <exemplo>teste</exemplo>, o Handler trabalha com a chamada de três métodos:

• startElement() – Essa função é chamada quando o parser encontra um elemento. No exemplo acima, startElement() é invocado com a passagem de “exemplo” como parâmetro; • characters() – Chamada logo após o startElement() e antes de se encontrar o final do elemento. No exemplo acima, characters() é invocado com a passagem de “teste” como parâmetro; • endElement() – Chamada quando o parser encontra o final do elemento. No exemplo acima, endElement() é invocado após characters() com a passagem de “exemplo” como parâmetro

Page 31: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

EventosHandler – SAXParser A partir de um SAXParserFactory, cria-se um XMLParser e, a partir deste, um XMLReader. Por fim, define-se o ContentHandler e então inicia-se o parsing. Em código:

Page 32: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

EventosHandler – Técnica para leitura do XML Cria-se um StringBuffer no startElement(). No characters(), adiciona-se os caracteres ao StringBuffer criado. Por fim, no endElement(), verifica-se a tag que foi lida e a informação é repassada para a variável desejada.

Dessa forma, quando o endElement() é chamado, descobre-se em que tag o parser se encontra e, então, basta passar o conteúdo do StringBuffer para a variável desejada. No endElement(), uma vez que o feed atual ou artigo atual já foi lido, pode-se armazenar os dados em um banco de dados, se desejar.

Page 33: Desenvolvimento de Apps e Games para Android - Parte 7

DESAFIO

Page 34: Desenvolvimento de Apps e Games para Android - Parte 7

Leitor de Feeds Completo (RSS)

Page 35: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário A interface da aplicação é composta por três telas: lista de Feeds, lista de Artigos e a tela para adição de um novo Feed.

Page 36: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário – Seleção de um Feed Quando um feed é selecionado, cria-se um Intent que chama a Activity de listagem dos artigos desse feed. Para isso, é necessário embutir os dados do feed como parâmetros da Activity, conforme mostrado abaixo.

Page 37: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Mo

de

lo

Feed e Artigo Entidades correspondentes às tabelas do SQLite. Um Feed possui um ID, título e uma URL. Um Artigo, por sua vez, possui um ID, o ID do feed a qual pertence, título e URL.

Page 38: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

NewsDB Classe responsável pela criação do banco de dados, inserção e remoção de registros.

Para o banco de dados do NewsDroid, são necessárias duas tabelas: feeds e artigos. A primeira deve conter um id, o título do feed e a URL do arquivo XML do feed. A segunda, por sua vez, contém um id, o título do artigo e a URL do artigo. Assim, o código SQL para criação dessas tabelas é o seguinte: create table feeds (feed_id integer primary key autoincrement, title text not null, url text not null); create table articles (article_id integer primary key autoincrement, feed_id int not null, title text not null, url text not null);

Page 39: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Co

ntr

ola

do

res

NewsDB Agora que se conhece a composição do banco de dados da aplicação, pode-se determinar quais as responsabilidades da classe NewsDB que irá abstrair o banco.

• Criar banco de dados e tabelas – A classe NewsDB deve criar o banco de dados e as tabelas necessárias para o armazenamento dos feeds e artigos; • Inserir dados – Prover métodos para a inserção de um novo feed ou artigo no banco de dados; • Excluir dados – Prover métodos para a remoção de um feed ou artigo do banco de dados; • Obter dados – Prover métodos para a obtenção de um feed e seus respectivos artigos do banco de dados.

Page 40: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário – Seleção de um Feed Uma vez selecionado o feed, o Activity de artigos é criado, recebendo os dados do feed pelo Intent. Isso é feito dentro do método onCreate() do ArtigosActivity.

Page 41: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário – Seleção de um Feed Para garantir que, quando o ArtigosActivity seja pausado ou destruído, ele não perca o seu estado, deve-se implementar o método onFreeze(), no qual se armazenam as informações desejadas.

Page 42: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário – Seleção de um Artigo Quando um artigo é selecionado, cria-se um Intent que é responsável por invocar o browser do Android, passando como parâmetro a URL do artigo escolhido.

Page 43: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id -

Vis

ão

Interface do Usuário – Adição de um Feed Simples Activity na qual o usuário digita a URL do Feed e o mesmo é adicionado no banco de dados.

Page 44: Desenvolvimento de Apps e Games para Android - Parte 7

New

sDro

id –

Le

ito

r d

e R

SS Estrutura do aplicativo (MVC)

O aplicativo NewsDroid consiste, basicamente, de sete classes:

Classes de modelo:

• Artigo – armazena os dados de um artigo, como o título e o endereço; • Feed – armazena os dados de um feed, como o título e o endereço do arquivo XML.

Classes de visão:

• ArtigosList – ListActivity que mostra os artigos; • FeedsList – ListActivity que mostra os feeds; • URLEditor – Activity para que o usuário digite a URL do feed desejado.

Classes de controle:

• NewsDB – abstrai o uso de SQLite para persistência; • RSSHandler – realiza o parsing de feeds RSS e captura apenas o necessário dos mesmos.

Page 45: Desenvolvimento de Apps e Games para Android - Parte 7

obrigado

• e-mail: [email protected]

• web: http://erisvaldojunior.com

• twitter: @erisvaldojunior