Desenvolvimento deApps e Games para AndroidPor Erisvaldo Júnior.   Parte 6 (29/09/2011)
RECAPITULANDO…
BackupManager     Android desde a API Level 8 permite armazenar dados na Cloud     sem necessidade de banco de dados exter...
BackupManagerCada vez que você alterar um dado do grupo deSharedPreferences, você deve invocar o método dataChanged() dacl...
Exemplo de BackupManager & SharedPreferences
Banco de Dados SQLiteAndroid provê suporte completo a bancos de dados SQLite. Osbancos criados serão acessíveis pelo nome ...
SQLiteOpenHelperO construtor de SQLiteOpenHelper recebe quatro        parâmetros,conforme especificado abaixo. A versão do...
SQLiteDatabase - query()As consultas com query() retornam um Cursor para navegação erecebem diversos parâmetros, cada qual...
Exemplo de Banco de Dados SQLite
Roteiro da AulaCOMUNICAÇÃO         LISTVIEW E          LEITOR DE FEEDS                   LISTACTIVITY                     ...
COMUNICAÇÃO
Network ConnectionHá, ainda, uma quinta forma de persistência em Android: oarmazenamento remoto. Pode-se usar uma rede (qu...
Android Networking Capabilities
org.apache.http.client.methods.HttpGet
org.apache.http.client.methods.HttpPost
URLConnectionjava.net.URL url = new java.net.URL(“http://developer.android.com");java.net.URLConnection uc = url.openConne...
URLConnectionFaça uma aplicação que acesse exemploget.php e mostre o                retorno em um TextView.               ...
LISTVIEW E LISTACTIVITY
ListView   Provê uma lista de itens (com scrolling) provenientes de um   Array/Lista ou de um banco de dados.   ListView é...
ListActivity   Classe base para uma Activity cujo objetivo é mostrar uma lista.   Provê facilidades como um método predefi...
Exemplo 1Criar 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 an...
ListActivity com layout dinâmico   Nos exemplos anteriores, o layout é o mesmo para todos os itens.   É possível mudar a a...
Exemplo 3:Personalizar ícone de itens específicos da lista.
Exemplo 3:Depois, basta setar o adaptador criado no método onCreate() daListActivity.
ListView, ListActivity e Adapters              Há muitas outras possibilidades!• setOnItemLongClickViewListener() de ListV...
LEITOR DE FEEDS
Leitor de Feeds do LazerJP
NewsDroid – Leitor de RSS   Android Permissions                            O aplicativo Leitor de Feeds precisa acessar a ...
NewsDroid – Leitor de RSS   Estrutura do aplicativo (MVC)                            O aplicativo Leitor de Feeds consiste...
NewsDroid – Leitor de RSS   ListActivity                            A lista de Feeds ou Artigos pode ser facilmente exibid...
ListActivity    public class EventosActivity extends ListActivityLayout de uma ListActivity deve conter um <ListView>
ListAdapter
EventosHandlerNewsDroid - Controladores   Classe responsável por ler um RSS (arquivo XML) e realizar o                    ...
EventosHandler (Evento)NewsDroid - Controladores   No arquivo XML, cada artigo deve ser lido através dos métodos          ...
EventosHandler (Parsing)NewsDroid - Controladores   A API SAX é bastante simples de ser utilizada. Basicamente, ao        ...
EventosHandler – SAXParser                            A partir de um SAXParserFactory, cria-se um XMLParser e, a          ...
EventosHandler – Técnica para leitura do XML                            Cria-se um StringBuffer no startElement(). No char...
DESAFIO
Leitor de Feeds Completo (RSS)
Interface do Usuário                    A interface da aplicação é composta por três telas: lista de                    Fe...
Interface do Usuário – Seleção de um Feed                    Quando um feed é selecionado, cria-se um Intent que chama a  ...
Feed e Artigo                     Entidades correspondentes às tabelas do SQLite. Um Feed                     possui um ID...
NewsDBNewsDroid - Controladores   Classe responsável pela criação do banco de dados, inserção e                           ...
NewsDBNewsDroid - Controladores   Agora que se conhece a composição do banco de dados da                            aplica...
Interface do Usuário – Seleção de um Feed                    Uma vez selecionado o feed, o Activity de artigos é criado,  ...
Interface do Usuário – Seleção de um Feed                    Para garantir que, quando o ArtigosActivity seja pausado ou  ...
Interface do Usuário – Seleção de um Artigo                    Quando um artigo é selecionado, cria-se um Intent que é    ...
Interface do Usuário – Adição de um Feed                    Simples Activity na qual o usuário digita a URL do Feed e o   ...
NewsDroid – Leitor de RSS   Estrutura do aplicativo (MVC)                            O aplicativo NewsDroid consiste, basi...
obrigado• e-mail: erisvaldo@yupistudios.com.br• web: http://erisvaldojunior.com• twitter: @erisvaldojunior
Upcoming SlideShare
Loading in …5
×

Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)

2,066 views
1,992 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,066
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
198
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)

  1. 1. Desenvolvimento deApps e Games para AndroidPor Erisvaldo Júnior. Parte 6 (29/09/2011)
  2. 2. RECAPITULANDO…
  3. 3. BackupManager Android desde a API Level 8 permite armazenar dados na Cloud sem necessidade de banco de dados externo (perfeito para armazenar SharedPreferences ou arquivos de configuração/informação simples). Como fazer isso com SharedPreferences? Primeiro passo: criar uma chave de acesso em http://code.google.com/android/backup/signup.html• Depois deve-se criar uma classe que herda de BackupAgentHelper e, no onCreate(), criar uma instância de SharedPreferencesBackupHelper;• No AndroidManifest.xml deve-se colocar os atributos android:allowBackups=“true” e android:backupAgent=“NomeDaSuaClasseQueHerdaDeBackupAgentHelper” em <application> e, por fim, adicionar a seguinte tag dentro de <application>:
  4. 4. BackupManagerCada vez que você alterar um dado do grupo deSharedPreferences, você deve invocar o método dataChanged() daclasse BackupManager. E agora? Está feito! Suas SharedPreferences serão armazenadas na nuvem, fazendo com que o usuário não perca a informação mesmo após reinstalar o seu aplicativo.
  5. 5. Exemplo de BackupManager & SharedPreferences
  6. 6. Banco de Dados SQLiteAndroid provê suporte completo a bancos de dados SQLite. Osbancos criados serão acessíveis pelo nome para qualquer classe daaplicação, mas não poderão ser acessados externamente. Para se criar um banco de dados, pode-se usar o método openOrCreateDatabase() do contexto. Contudo, a forma recomendada é criar uma subclasse de SQLiteOpenHelper e sobrescrever o método onCreate() para a criação das tabelas.
  7. 7. SQLiteOpenHelperO construtor de SQLiteOpenHelper recebe quatro parâmetros,conforme especificado abaixo. A versão do banco de dados émuito útil para o caso de o banco já existir e precisar seratualizado (através da adição de novas tabelas e/ou colunas, porexemplo).
  8. 8. SQLiteDatabase - query()As consultas com query() retornam um Cursor para navegação erecebem diversos parâmetros, cada qual com sua utilidade para aconsulta, conforme explicitado abaixo.
  9. 9. Exemplo de Banco de Dados SQLite
  10. 10. Roteiro da AulaCOMUNICAÇÃO LISTVIEW E LEITOR DE FEEDS LISTACTIVITY Bem vindo ao mundo da mobilidade
  11. 11. COMUNICAÇÃO
  12. 12. Network ConnectionHá, ainda, uma quinta forma de persistência em Android: oarmazenamento remoto. Pode-se usar uma rede (quandodisponível) para armazenar e recuperar dados de seus serviçosbaseados na Web. Para realizar operações na rede, usam-se classes dos seguintes pacotes: • java.net; • android.net.
  13. 13. Android Networking Capabilities
  14. 14. org.apache.http.client.methods.HttpGet
  15. 15. org.apache.http.client.methods.HttpPost
  16. 16. URLConnectionjava.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
  17. 17. URLConnectionFaç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
  18. 18. LISTVIEW E LISTACTIVITY
  19. 19. 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.
  20. 20. 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.
  21. 21. Exemplo 1Criar uma lista de elementos com ListActivity + Array Adapter +Layout Default.
  22. 22. 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
  23. 23. 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.
  24. 24. Exemplo 3:Personalizar ícone de itens específicos da lista.
  25. 25. Exemplo 3:Depois, basta setar o adaptador criado no método onCreate() daListActivity.
  26. 26. 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).
  27. 27. LEITOR DE FEEDS
  28. 28. Leitor de Feeds do LazerJP
  29. 29. NewsDroid – Leitor de RSS Android Permissions O aplicativo Leitor de Feeds precisa acessar a Internet.
  30. 30. 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.
  31. 31. 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).
  32. 32. ListActivity public class EventosActivity extends ListActivityLayout de uma ListActivity deve conter um <ListView>
  33. 33. ListAdapter
  34. 34. EventosHandlerNewsDroid - 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.
  35. 35. 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).
  36. 36. 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
  37. 37. EventosHandler – SAXParser A partir de um SAXParserFactory, cria-se um XMLParser e, a partir deste, um XMLReader. Por fim, define-se oNewsDroid - Controladores ContentHandler e então inicia-se o parsing. Em código:
  38. 38. EventosHandler – Técnica para leitura do XML Cria-se um StringBuffer no startElement(). No characters(), adiciona-se os caracteres ao StringBuffer criado. Por fim, noNewsDroid - 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.
  39. 39. DESAFIO
  40. 40. Leitor de Feeds Completo (RSS)
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. NewsDBNewsDroid - 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);
  45. 45. NewsDBNewsDroid - 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.
  46. 46. 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
  47. 47. 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
  48. 48. 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
  49. 49. 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
  50. 50. 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.
  51. 51. obrigado• e-mail: erisvaldo@yupistudios.com.br• web: http://erisvaldojunior.com• twitter: @erisvaldojunior

×