27
@eloijr www.facebook.com/eloijr

Projeto Android Your Heroes que Utiliza a API Marvel

Embed Size (px)

Citation preview

@eloijr

www.facebook.com/eloijr

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

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?

Persistência

● SQLite● Serializable● Classe Contract● SQLiteOpenHelper

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