projeto android your heroes que utiliza a api marvel
TRANSCRIPT
Eloi Jr
● Iniciou na área mobile em 2002● Palestrou em diversos eventos de TI● Escreveu artigos técnicos● Desenvolvedor mobile desde o Java ME● Projetos em Windows Phone e Android● Empreendedor no Maranhão!?!??
Imperatriz-MA
● Segundo maior centro político, cultural e populacional do Maranhão: +400hab
● Beira-rio Tocantins: 33º às 20:00● Comércio varejista e atacadista e algumas
indústrias (Suzano Papel e Celulose)● Cerca de 600km de Belém, São Luís, Palmas e
Teresina● Rio Tocantins: segundo maior rio brasileiro em
águas brasileiras
YourHeroes
● App Android desenvolvido como projeto final do curso Udacity/Google “Developing Android Apps”
● Iniciativa de apoio aos GDG● Diversos conceitos importantes: Definição de
interfaces, SQLite, Providers, Loaders, SyncAdapters, IntentServices e etc.
● API escolhida: Marvel!
Serviços RESTful
● Serviço web que utiliza paradigma arquitetônico REST (Representational State Transfer)
● Exposição e troca de informações usando URIs● Leve● Transmissão de dados via HTTP● APIs RESTful: Google Maps, infor. sobre
temperatura, trânsito, Nasa, governo, DPRF, ESPN, API Marvel
JSON
● JavaScript Object Notation● Formato leve de troca de dados
{ "id": 1009664, "name": "Thor", "description": "As the Norse God...", "modified": "2013-10-24T14:24:12-0400", "thumbnail": { "path": "http://...", "extension": "jpg" } }
Marvel Comics API
● Serviço RESTful com JSON● Acesso a dados de mais 70 anos de
quadrinhos Marvel● Personagens, quadrinhos, séries, eventos,
estórias e criadores!● Imagens em diferentes resoluções e tamanhos● Documentação● Ferramenta online para testar chamadas à API
Marvel Comics API
● Necessário obter uma chave pública e privada● Limite de 3000 req./dia● Link p/ site Marvel; ● Data provided by Marvel. © 2014 Marvel● Não é permitido cache indefinido! Sugestão: 24
horas● developer.marvel.com
Marvel Comics API: Imagens
● PORTRAIT, STANDARD, LANDSCAPE● SMALL, MEDIUM, XLARGE, FANTASTIC,
UNCANNY, AMAZING e INCREDIBLE● DETAIL● FULL_SIZE
YourHeroes - Tópicos
● Interface de usuário p/ tablets e smartphones● Persistência● Loader● Content Providers (Contract e Provider)● IntentService● JSON parsing● CursorAdapter● Carregamento de Imagens em uma Thread
Interface Usuário tablets/smartphones
● Fragments!● layout-sw600dp e values-sw600dp● Values-v14 (Android 4.0 – Ice Cream Sandw.)● Pasta drawable● footer.xml
Fragment
● Parte da Interface de Usuário de uma Activity● Interface dinâmica e multi-pane● Comportamento e visualização
Suporte a Diferentes Telas
● Smallest-width Qualifier: sw600dp, sw720dp● Configurações de acordo com API: v11 (3.0),
v14 (4.0)● Uso da pasta drawable
Por que Persistir Dados?
● Resposta Rápida Para o Usuário● Redução de Consumo de Bateria● Instabilidades Eventuais na Rede de Dados● Locais Sem Serviço de Dados● Shared Preferences ou SQLite?
Content Provider
● Acesso Universal a Dados a partir de URI● Retorna uma Lista ou Apenas um Item● Compartilhamento de Dados● Acesso a Dados Nativos: Calendário, SMS,
Contatos e etc.
Content Provider
Visualizar os contatos:
Uri u = Uri.parse(“content://com.android.contacts/contacs/” );
Intent it = new Intent(Intent.ACTION_PICK, u);
startActivity(it);
Loader
● Leitura assíncrona de dados● Monitora os Dados Utilizando AsyncTask● Atualiza a UI em Caso de Mudança● Permite Acesso a Thread de UI● Reconecta o Cursor Automaticamente em
Mudanças de Configurações● CursorLoader utiliza Contents Provider!
CursorAdapter
● Método de Alta Performance Para Apresentar Dados do SQLite em Listas
● Permite Mapear as Colunas Direto a Partir do Banco de Dados SQLite
IntentService
● Utilizado em Tarefas Longas● Roda em uma Thread Separada● Chamada por uma Intent● Se Comunica com a Main Thread através de
Handlers ou Broadcast
IntentService YourHeroes
● Conecta com a API Marvel utilizando uma URL● Carrega os Dados● Efetua o parsing JSON● Gera um ArrayList<Person>● Insere os Registros na Tabela do SQLite● Utiliza um BradcastReceiver para Notificar o
Fim da Tarefa (remover spinner e progresso)
JSON parsing
● Parsing!● Formato Leve e Simples Para Troca de Dados● Elementos básicos: objetos, propriedades e
arrays● Objetos: “{}” ; propriedades: “:” ; arrays: “[]”● JSONObject e JSONArray
JSON parsing
{ "id": 1009664, "name": "Thor", "description": "As the Norse God...", "modified": "2013-10-24T14:24:12-0400", "thumbnail": { "path": "http://...", "extension": "jpg" } }
Carregamento de Imagens: ImageLoader
● Cria uma Thread para Cada Imagem a ser Carregada da Lista, empilhando-as
● Cada Imagem Carregada é Gravada No Sistema de Arquivos (data/images)
● Se já Estiver em Cache a Imagem é Lida a Partir do Mesmo. Caso Contrário: NET!
● Um Runnable p/ Cada Imagem a Ser Desenhada pelo CursorAdapter
YourHeroes - Issues
● Material Design!● Acesso a dados de revistas, séries, eventos,
estórias e criadores● Limitar cache para máx. 24 horas● Aproveitamente Ideal dos Formatos de
Imagens Disponíveis pela API● ?
@eloijr
Referências:http://developer.android.comhttp://developer.marvel.com
Email: [email protected]
www.facebook.com/eloijr