SlideShare a Scribd company logo
1 of 45
Download to read offline
Desenvolvimento de
Apps e Games para Android




Por Erisvaldo Júnior.   Parte 7 (04/10/2011)
RECAPITULANDO…
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
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
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.
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.
Exemplo 1
Criar uma lista de elementos com ListActivity + Array Adapter +
Layout Default.
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
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.
Exemplo 3:
Personalizar ícone de itens específicos da lista.
Exemplo 3:
Depois, basta setar o adaptador criado no método onCreate() da
ListActivity.
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).
Roteiro da Aula



PARSER XML        LEITOR DE
 (TWITTER)          FEEDS




                     Bem vindo ao mundo da mobilidade
PARSER XML (TWITTER)
NewsDroid – Leitor de RSS   Android Permissions
                            O Parser XML do Twitter precisa acessar a Internet.
TwitterHandler
NewsDroid - Controladores   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 )
TwitterHandler (Tweet)
NewsDroid - Controladores   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.
TwitterHandler (Parsing)
NewsDroid - Controladores   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.
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
NewsDroid - Controladores
               inicia-se o parsing.

               Em código:
TwitterHandler – Técnica para leitura do XML
Cria-se um StringBuffer no startElement(). No characters(), adiciona-se os
   NewsDroid - Controladores
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.
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.
LEITOR DE FEEDS
Leitor de Feeds do LazerJP
NewsDroid – Leitor de RSS   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.
NewsDroid – Leitor de RSS   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).
ListActivity
    public class EventosActivity extends ListActivity




Layout de uma ListActivity deve conter um <ListView>
ListAdapter
EventosHandler
NewsDroid - Controladores   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.
EventosHandler (Evento)
NewsDroid - Controladores   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).
EventosHandler (Parsing)
NewsDroid - Controladores   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
EventosHandler – SAXParser
                            A partir de um SAXParserFactory, cria-se um XMLParser e, a
                            partir deste, um XMLReader. Por fim, define-se o
NewsDroid - Controladores
                            ContentHandler e então inicia-se o parsing.

                            Em código:
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
NewsDroid - Controladores
                            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.
DESAFIO
Leitor de Feeds Completo (RSS)
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.
NewsDroid - 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.
NewsDroid - Visão
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.
NewsDroid - Modelo
NewsDB
NewsDroid - Controladores   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);
NewsDB
NewsDroid - Controladores   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.
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.
NewsDroid - 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.
NewsDroid - 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.
NewsDroid - 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.
NewsDroid - Visão
NewsDroid – Leitor de RSS   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.
obrigado
• e-mail: erisvaldo@yupistudios.com.br
• web: http://erisvaldojunior.com
• twitter: @erisvaldojunior

More Related Content

Similar to Desenvolvimento de Apps e Games para Android - Parte 7

Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Settings Activities - Criando atividades de configuração para aplicações And...
Settings Activities  - Criando atividades de configuração para aplicações And...Settings Activities  - Criando atividades de configuração para aplicações And...
Settings Activities - Criando atividades de configuração para aplicações And...william-costa
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - PersistênciaArthur Emanuel
 
ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views Carlos Atila Abreu
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoGuilhermePetrosky
 
1 exercicio funcoes com string e manipulacao com arquivo
1 exercicio  funcoes com string e manipulacao com arquivo1 exercicio  funcoes com string e manipulacao com arquivo
1 exercicio funcoes com string e manipulacao com arquivoKievnny Mendonca
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 
Javascript - Aplicações Interativas para a Web
Javascript - Aplicações Interativas para a WebJavascript - Aplicações Interativas para a Web
Javascript - Aplicações Interativas para a WebAdriano Lima
 
Usando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpUsando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpbrunocf007
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 

Similar to Desenvolvimento de Apps e Games para Android - Parte 7 (20)

Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Settings Activities - Criando atividades de configuração para aplicações And...
Settings Activities  - Criando atividades de configuração para aplicações And...Settings Activities  - Criando atividades de configuração para aplicações And...
Settings Activities - Criando atividades de configuração para aplicações And...
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - Persistência
 
ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galo
 
1 exercicio funcoes com string e manipulacao com arquivo
1 exercicio  funcoes com string e manipulacao com arquivo1 exercicio  funcoes com string e manipulacao com arquivo
1 exercicio funcoes com string e manipulacao com arquivo
 
Php Básico - Parte 2
Php Básico - Parte 2Php Básico - Parte 2
Php Básico - Parte 2
 
Pesquisa ppi 2
Pesquisa ppi 2Pesquisa ppi 2
Pesquisa ppi 2
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
Javascript - Aplicações Interativas para a Web
Javascript - Aplicações Interativas para a WebJavascript - Aplicações Interativas para a Web
Javascript - Aplicações Interativas para a Web
 
Tutorial struts
Tutorial strutsTutorial struts
Tutorial struts
 
IReport.pdf
IReport.pdfIReport.pdf
IReport.pdf
 
Curso de Servlets
Curso de ServletsCurso de Servlets
Curso de Servlets
 
Como criar Custom Tags
Como criar Custom TagsComo criar Custom Tags
Como criar Custom Tags
 
Usando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpUsando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para php
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 

More from Erisvaldo Junior

Desenvolvimento de Apps e Games para Android - Parte 4
Desenvolvimento de Apps e Games para Android - Parte 4Desenvolvimento de Apps e Games para Android - Parte 4
Desenvolvimento de Apps e Games para Android - Parte 4Erisvaldo Junior
 
Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Erisvaldo Junior
 
Desenvolvimento de Apps e Games para Android - Parte 2
Desenvolvimento de Apps e Games para Android - Parte 2Desenvolvimento de Apps e Games para Android - Parte 2
Desenvolvimento de Apps e Games para Android - Parte 2Erisvaldo Junior
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Erisvaldo Junior
 
Java me record management system
Java me   record management systemJava me   record management system
Java me record management systemErisvaldo Junior
 
Java me material complementar
Java me   material complementarJava me   material complementar
Java me material complementarErisvaldo Junior
 
Java me material complementar
Java me   material complementarJava me   material complementar
Java me material complementarErisvaldo Junior
 
Java me record management system
Java me   record management systemJava me   record management system
Java me record management systemErisvaldo Junior
 
Java me generic connection framework
Java me   generic connection frameworkJava me   generic connection framework
Java me generic connection frameworkErisvaldo Junior
 
Introdução a api de baixo nível do java me
Introdução a api de baixo nível do java meIntrodução a api de baixo nível do java me
Introdução a api de baixo nível do java meErisvaldo Junior
 
Introdução a game api do java me
Introdução a game api do java meIntrodução a game api do java me
Introdução a game api do java meErisvaldo Junior
 
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...Erisvaldo Junior
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxErisvaldo Junior
 

More from Erisvaldo Junior (20)

Desenvolvimento de Apps e Games para Android - Parte 4
Desenvolvimento de Apps e Games para Android - Parte 4Desenvolvimento de Apps e Games para Android - Parte 4
Desenvolvimento de Apps e Games para Android - Parte 4
 
Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3Desenvolvimento de Apps e Games para Android - Parte 3
Desenvolvimento de Apps e Games para Android - Parte 3
 
Desenvolvimento de Apps e Games para Android - Parte 2
Desenvolvimento de Apps e Games para Android - Parte 2Desenvolvimento de Apps e Games para Android - Parte 2
Desenvolvimento de Apps e Games para Android - Parte 2
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
 
Nokia SDK for Java
Nokia SDK for JavaNokia SDK for Java
Nokia SDK for Java
 
Java me record management system
Java me   record management systemJava me   record management system
Java me record management system
 
Java me material complementar
Java me   material complementarJava me   material complementar
Java me material complementar
 
Java me material complementar
Java me   material complementarJava me   material complementar
Java me material complementar
 
Java me record management system
Java me   record management systemJava me   record management system
Java me record management system
 
Java me generic connection framework
Java me   generic connection frameworkJava me   generic connection framework
Java me generic connection framework
 
Introdução a api de baixo nível do java me
Introdução a api de baixo nível do java meIntrodução a api de baixo nível do java me
Introdução a api de baixo nível do java me
 
Introdução a game api do java me
Introdução a game api do java meIntrodução a game api do java me
Introdução a game api do java me
 
O futuro do Android
O futuro do AndroidO futuro do Android
O futuro do Android
 
Android Aula 5
Android Aula 5Android Aula 5
Android Aula 5
 
Android Aula 4
Android Aula 4Android Aula 4
Android Aula 4
 
Android Aula 3
Android Aula 3Android Aula 3
Android Aula 3
 
Android Aula 2
Android Aula 2Android Aula 2
Android Aula 2
 
Android Aula 1
Android Aula 1Android Aula 1
Android Aula 1
 
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linux
 

Desenvolvimento de Apps e Games para Android - Parte 7

  • 1. Desenvolvimento de Apps e Games para Android Por Erisvaldo Júnior. Parte 7 (04/10/2011)
  • 3. 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
  • 4. 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
  • 5. 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.
  • 6. 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.
  • 7. Exemplo 1 Criar uma lista de elementos com ListActivity + Array Adapter + Layout Default.
  • 8. 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
  • 9. 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.
  • 10. Exemplo 3: Personalizar ícone de itens específicos da lista.
  • 11. Exemplo 3: Depois, basta setar o adaptador criado no método onCreate() da ListActivity.
  • 12. 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).
  • 13. Roteiro da Aula PARSER XML LEITOR DE (TWITTER) FEEDS Bem vindo ao mundo da mobilidade
  • 15. NewsDroid – Leitor de RSS Android Permissions O Parser XML do Twitter precisa acessar a Internet.
  • 16. TwitterHandler NewsDroid - Controladores 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 )
  • 17. TwitterHandler (Tweet) NewsDroid - Controladores 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.
  • 18. TwitterHandler (Parsing) NewsDroid - Controladores 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.
  • 19. 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 NewsDroid - Controladores inicia-se o parsing. Em código:
  • 20. TwitterHandler – Técnica para leitura do XML Cria-se um StringBuffer no startElement(). No characters(), adiciona-se os NewsDroid - Controladores 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.
  • 21. 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.
  • 23. Leitor de Feeds do LazerJP
  • 24. NewsDroid – Leitor de RSS 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.
  • 25. NewsDroid – Leitor de RSS 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).
  • 26. ListActivity public class EventosActivity extends ListActivity Layout de uma ListActivity deve conter um <ListView>
  • 28. EventosHandler NewsDroid - Controladores 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.
  • 29. EventosHandler (Evento) NewsDroid - Controladores 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).
  • 30. EventosHandler (Parsing) NewsDroid - Controladores 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
  • 31. EventosHandler – SAXParser A partir de um SAXParserFactory, cria-se um XMLParser e, a partir deste, um XMLReader. Por fim, define-se o NewsDroid - Controladores ContentHandler e então inicia-se o parsing. Em código:
  • 32. 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 NewsDroid - Controladores 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.
  • 34. Leitor de Feeds Completo (RSS)
  • 35. 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. NewsDroid - Visão
  • 36. 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. NewsDroid - Visão
  • 37. 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. NewsDroid - Modelo
  • 38. NewsDB NewsDroid - Controladores 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);
  • 39. NewsDB NewsDroid - Controladores 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.
  • 40. 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. NewsDroid - Visão
  • 41. 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. NewsDroid - Visão
  • 42. 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. NewsDroid - Visão
  • 43. 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. NewsDroid - Visão
  • 44. NewsDroid – Leitor de RSS 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.
  • 45. obrigado • e-mail: erisvaldo@yupistudios.com.br • web: http://erisvaldojunior.com • twitter: @erisvaldojunior