SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Consumindo Web Service REST
com Android
Alexandre Antunes
Bemobi & Portal Android
Intodução
➢
➢
➢
➢
➢
➢
➢
➢
➢

Necessidade de ter um aplicativo online;
Por que utilizar um Web Service (Padrão x Solução Proprietária);
Tipos de Web Service (SOAP x REST);
Overview das API’s existentes (String x Volley);
Formatos de notação de dados (JSON x XML);
Transformando dados em objetos Java (Android JSON x google-gson);
Comunicação eficiente;
Transmitindo dados seguros;
Implementando um simples REST Client.
Necessidade de ter um aplicativo online
Necessidade de ter um aplicativo online
➢
➢
➢
➢
➢
➢
➢

Guardar dados em nuvem;
Sistema multiplataforma (web, desktop e mobile);
Saber qual o interesse dos usuários que estão acessando a plataforma;
Controle de acesso;
Serviço customizado para cada cliente;
Compartilhar ações/dados/eventos;
Redes sociais (Facebook, twitter e Google+).
Por que utilizar um Web Service (Protocolo Proprietário)
➢
➢
➢
➢
➢
➢
➢
➢
➢

Identificadores de mensagens (sucesso e erro);
Tipos de erros;
Formato de dados (String??? Array de bytes??);
Converter esses dados quando entram no sistema;
Segurança (criptografia);
Documentação do protocolo para implementação de terceiros;
Debug;
Custo;
Tempo de desenvolvimento.
Por que utilizar um Web Service (Padrão)
➢
➢

São baseados em tecnologia padrão;
HTTP como protocolo de comunicação;
○
○

➢
➢
➢
➢
➢
➢

Headers;
Status code;

SSL para seguraça;
Dados em XML ou JSON;
Ferramentas que facilitam a conversão dos dados;
Ferramentas de debug (SoapUi, Postman, REST Console e etc.);
API’s pada Java (Jersey, CXF, Spring MVC e etc.);
Praticamente todas as linguagens suportam a criação de um Web
Service.
Tipos de Web Service
➢

➢

➢

➢

O Web Service foi criado para que aplicações desenvolvidas em
linguagens diferentes possam se comunicar por meio de serviços
(métodos) que são expostos para que outros sistemas possam acessálos.
O objetivo dos Web Services é a comunicação de aplicações através da
Internet.
O W3C e OASIS são as instituições responsáveis pela padronização
dos Web Services. Empresas como IBM, Microsoft e Sun apóiam o
desenvolvimento desse padrão.
Segundo o W3C um Web Service define-se como: um sistema projetado
para suportar a interoperabilidade entre máquinas sobre rede.
Tipos de Web Service (SOAP)
➢

➢

➢

O SOAP (Simple Object Access Protocol) baseia-se numa invocação
remota de um método e para tal necessita especificar o endereço do
componente, o nome do método e os argumentos para esse método.
Os dados são formatados em XML com determinadas regras e enviados
normalmente por HTTP.
Não define ou impõe qualquer semântica, quer seja de modelo de
programação, quer seja a semântica específica da implementação. Este
aspecto é extremamente importante, pois permite que o serviço ou o
cliente sejam aplicações desenvolvidas por diferentes linguagens.
Tipos de Web Service (SOAP)
➢

➢

O WSDL descreve os serviços disponibilizados à rede através de uma
semântica XML, este providencia a documentação necessária para se
chamar um sistema distribuído e o procedimento necessário para que
esta cominicação se estabeleça.
Enquanto o SOAP especifica a comunicação entre um cliente e um
servidor, o WSDL descreve os serviços oferecidos.
Tipos de Web Service (REST)
➢

➢

➢

➢

REST é uma técnica de engenharia de software para sistemas
distribuídos desenvolvida pelo Roy Fielding.
A REST (Transferência de Estado Representativo) é pretendida como
uma imagem do design da aplicação se comportará: uma rede de
websites (um estado virtual), onde o usuário progride com uma
aplicação selecionando as ligações (transição de estado), tendo como
resultado a página seguinte (que representa o estado seguinte da
aplicação) que está sendo tranferida ao usuário e apresentada para seu
uso.
Sistemas que seguem os princípios REST são conhecidos como
RESTful.
WADL.
Tipos de Web Service (REST)
➢

➢

➢

O que é importante ter em mente é que o princial em um Web Service
RESTful são as URLs do sistema e os resources.
Um resource é um recurso, uma entidade, ou seja, é um objeto com
informação que será representado por meio de um XML.
Em geral, a URL para acessar esse recurso será sempre a mesma,
porém caso mudemos o método HTTP (GET, POST, PUT e DELETE) o
resultado da requisição será diferente.
Método

exemplo.com/recurso

exemplo.com/recurso/1

GET

Lista os recursos

Detalhe de um recurso

POST

Adiciona um recurso

-

PUT

-

Atualiza um recurso

DELETE

-

Remove um recurso
Formatos de dados (JSON x XML)
➢

➢

➢

➢

JSON e XML são formatos para a notação de dados a serem
transmitidos;
A maior e mais importante diferença entre eles, e o que importa para
nós nesse momento, é que o XML acaba ocupando muito mais espaço
que o JSON quando representam o mesmo objeto.
Isso acontece porque o XML usa uma tag para identificar o inicio e o
final de cada nó.
O JSON é fortemente recomendado quando estamos falando de
dispositivos móveis, por consumir menos banda da conexão de internet
do usuário.
Formatos de notação dados (JSON x XML)
Spring

➢

O Spring é uma ferramenta bastante usada por desenvolvedores Java e
não podia estar de fora quando falamos em Android.

➢

A ferramenta para android é bem leve e simples de usar, apresentando
as seguintes funcionalidades principais:
○ Rest Client para Android;
○ Suporte a autenticação para APIs seguras.

➢

Ela está disponível tanto para Maven quanto para o Gradle.

➢

Como ela é modular, podemos usar apenas o que vamos precisar.
Spring

➢

Maven
<dependencies>
<dependency>
<groupId> org.springframework.android </groupId>
<artifactId> spring-android-rest-template </artifactId>
<version> 1.0.1.RELEASE </version>
</dependency>
</dependencies>

➢

Gradle
dependencies {
compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
}
Spring - Utilização

➢

Criamos o nosso POJO, que será exatamente o mapeamento no nosso
JSON:

Retorno do Servidor:

POJO:

{

public class Cliente {
private int id;
private String nome;
private String cpf;
private String endereco;

"cpf": "111222333-00",
"endereco": "Rua das ruas, 9",
"id": "1",
"nome": "Alexandre Antunes"
}

//Getters and Setters
}
Spring - Utilização

➢

Para fazer o parse o Spring recomenda usar o Jackson, que é bastante
usado e muito bom por sinal, mas normalmente é usado no lado do
Servidor.
<dependency>
<groupId>com.fasterxml.jackson.core
</groupId>
<artifactId>jackson-databind
</artifactId>
<version>2.2.1</version>
</dependency>

➢

A questão é avaliar o desempenho. Ele suporta as seguintes APIs para
essa função:
○
○
○

Jackson JSON Processor;
Jackson 2.x;
Google Gson.
Spring - Utilização

➢

Fazendo a requisição ao serviço:
// Saber a URL do serviço
String url = "http://10.0.2.2:8080/WebServiceREST/cliente/1";

// Criar uma instância do RestTemplate
RestTemplate restTemplate = new RestTemplate();

// Dizer ao Spring que você quer usar o Jackson para fazer o parse do JSON
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

// Executar o mmétodo HTTP GET, fazendo o parse do JSON para o Objeto Cliente
Cliente cliente = restTemplate.getForObject(url, Cliente.class);

➢

Agora só nos basta usar esse objeto para popular nossa “view”, salvar
no banco ou qualquer outra coisa.
Volley
➢
➢

➢
➢

O Volley foi divulgado no Google I/O 2013;
Basicamente ela serve para realizar requisições para a web com
simplicidade e, o mais importante, rapidamente;
Processamento das requisições e cache;
Benefícios:
○ Gerencia automaticamente as requisições;
○ Cache em disco e memória;
○ Possibilidade de cancelar uma requisição;
○ Customização;
○ Debugging e tracing;
Volley - Utilização
➢

Baixar o Volley no Git e incluir o código no seu projeto:
git clone https://android.googlesource.com/platform/frameworks/volley

➢

Importando projetos do Git:
http://www.technotalkative.com/android-import-android-projects-from-git/

➢

Fazendo a requisição ao serviço:
// Saber a URL do serviço
String url = "http://10.0.2.2:8080/WebServiceREST/cliente/1";
// Criar uma instância do RequestQueue
RequestQueue queue = Volley.newRequestQueue(this);
Volley - Utilização
// Criar uma instância do JsonObjectRequest, passando o método HTTP, a url, um callback de sucesso
e um de erro.
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.
Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO Incluir código de sucesso.
// Usar a lib de JSON padrão ou o Gson para fazer o parse para o seu Objeto,
// no nosso caso o objeto é o Cliente.
Cliente cliente = parse(response); // Já veremos a implementação desse método.
// Popular a View com o objeto Cliente.
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Incluir código para quando a requisição falhar.
// Mostrar uma Dialog informando ao usuário o erro.
}
});
Transformando dados em objetos Java

Existem várias formas e APIs para fazer o parse de um JSON para um
objeto, as mais importantes são:
➢

Jackson:
○ Não é tão simples de implementar;
○ Tem dezenas de funcionalidades;
○ Com o Spring pode ser bem simples.

➢

Nativo JSONObject:
○ Já vem no SDK do Android;
○ Simples de implementar, mas trabalhoso;

➢

Google Gson:
○ Também pode usar com o Spring;
○ A mais simples. Em uma linha o seu objeto está pronto para usar;
Transformando dados em objetos Java

➢

Nativo JSONObject:

private Cliente parse(JSONObject jsonObject) {
Cliente cliente = new Cliente();

Retorno do Servidor:
{

try {
cliente.setId(jsonObject.getString("id"));

"cpf": "111222333-00",
"endereco": "Rua das ruas, 9",

cliente.setNome(jsonObject.getString("nome"));

"id": "1",

cliente.setCpf(jsonObject.getString("cpf"));

"nome": "Alexandre Antunes"

cliente.setEndereco(jsonObject.getString("endereco"));
} catch (JSONException e) {
e.printStackTrace();
}
return cliente;
}

}
Transformando dados em objetos Java

➢

Google Gson:

private Cliente parse(JSONObject jsonObject) {
Gson gson = new Gson();

Retorno do Servidor:
{

return gson.fromJson(jsonObject, Cliente.class);

"cpf": "111222333-00",
"endereco": "Rua das ruas, 9",

}

"id": "1",
"nome": "Alexandre Antunes"
}
Spring x Volley

Spring:
○

➢

Volley
○
○

➢

Usa a thread atual para realizar a requisição (Como a partir da API
level 11 do Android, não podemos mais executar tarefas demoradas
na MainThread, é obrigatório que seja feito em uma thread separada
(NetworkOnMainThreadException) - Recomendo o uso de uma AsyncTask
para realizar essa função.

Faz as requisições em uma nova thread;
Implementa uma fila para as requisições.

Ambos suportam HTTPS.
Comunicação eficiente
Comunicação eficiente
Comunicação eficiente
➢

Sempre informar ao usuário que os dados estão sendo carregados;

➢

Evitar trafegar dados desnecessários;

➢

Evitar requisições repetidas;

➢

Quebrar retornos muito grandes em várias requisições (paginar);

➢

Carregar a tela de forma assíncrona(textos x imagens);
Transmitindo dados seguros
➢

Autenticação (OAuth - token);

➢

Autorização (Áreas restritas);

➢

SSL (HTTPS);
Implementando um simples REST Client no Android
public class HttpClientSingleton {
private static final int JSON_CONNECTION_TIMEOUT = 3000;
private static final int JSON_SOCKET_TIMEOUT = 5000;
private static HttpClientSingleton instance;
private HttpParams httpParameters ;
private DefaultHttpClient httpclient;
private void setTimeOut(HttpParams params){
HttpConnectionParams.setConnectionTimeout(params, JSON_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, JSON_SOCKET_TIMEOUT);
}
private HttpClientSingleton() {
httpParameters = new BasicHttpParams();
setTimeOut(httpParameters);
httpclient = new DefaultHttpClient(httpParameters);
}
public static DefaultHttpClient getHttpClientInstace(){
if(instance==null)
instance = new HttpClientSingleton();
return instance.httpclient;
}
}
Implementando um simples REST Client no Android
public String[] get(String url) {
String[] result = new String[2];
HttpGet httpget = new HttpGet(url);
HttpResponse response;
try {
response = HttpClientSingleton.getHttpClientInstace().execute(httpget);
HttpEntity entity = response.getEntity();

if (entity != null) {
result[0] = String.valueOf(response.getStatusLine().getStatusCode());
InputStream instream = entity.getContent();
result[1] = toString(instream);
instream.close();
Log.i("get", "Result from post JsonPost : " + result[0] + " : " + result[1]);
}
} catch (Exception e) {
Log.e("NGVL", "Falha ao acessar Web service", e);
result[0] = "0";
result[1] = "Falha de rede!";
}
return result;
}
Implementando um simples REST Client no Android
private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/cliente/";

public Cliente getCliente(int id) throws Exception {
String[] resposta = new WebServiceCliente().get(URL_WS + id);

if (resposta[0].equals("200")) {
Gson gson = new Gson();
Cliente cliente = gson.fromJson(resposta[1], Cliente.class);
return cliente;
} else {
throw new Exception(resposta[1]);
}
}
Fontes
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢
➢

http://pt.wikipedia.org/wiki/Web_service#SOAP
http://pt.wikipedia.org/wiki/REST
http://en.wikipedia.org/wiki/Web_Application_Description_Language
http://spring.io/guides/gs/consuming-rest-android/
http://docs.spring.io/spring-android/docs/1.0.x/reference/html/rest-template.html
http://www.portalandroid.org/comunidade/viewforum.php?f=119
https://github.com/FasterXML/jackson
http://developer.android.com/reference/org/json/JSONObject.html
https://code.google.com/p/google-gson/
http://www.technotalkative.com/android-import-android-projects-from-git/
http://java.dzone.com/articles/android-%E2%80%93-volley-library
https://android.googlesource.com/platform/frameworks/volley
https://gist.github.com/ficusk/5474673
http://pt.wikipedia.org/wiki/JSON
http://pt.wikipedia.org/wiki/XML
Contato
➢

Alexandre Antunes
○
○

➢

Administrador do Portal Android;
Membro organizador do GDG Rio de Janeiro;

antunes@portalandroid.org

Mais conteúdo relacionado

Mais procurados

Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHPelliando dias
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPRenan Gonçalves
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsEduardo Mendes
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3David Ruiz
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHPAdler Medrado
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilLuis Cipriani
 
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Carl Edwin
 
Ajax O Objeto Xml Http Request Parte 4
Ajax   O Objeto Xml Http Request   Parte 4Ajax   O Objeto Xml Http Request   Parte 4
Ajax O Objeto Xml Http Request Parte 4infinitopublicidade
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesDaniel Brandão
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisDaniel Brandão
 
PHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e QuerystringPHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e QuerystringDaniel Brandão
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 

Mais procurados (20)

Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHP
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHP
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e Taglibs
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHP
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
 
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
 
Ajax O Objeto Xml Http Request Parte 4
Ajax   O Objeto Xml Http Request   Parte 4Ajax   O Objeto Xml Http Request   Parte 4
Ajax O Objeto Xml Http Request Parte 4
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas Condicionais
 
PHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e QuerystringPHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e Querystring
 
Rest
RestRest
Rest
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 

Destaque

Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...
Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...
Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...Bruno Vasconcellos
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJataiCaelum
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidFernando Anselmo
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPRamon Ribeiro Rabello
 
Consuming RESTful services in PHP
Consuming RESTful services in PHPConsuming RESTful services in PHP
Consuming RESTful services in PHPZoran Jeremic
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONMarcio Palheta
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Arquitetura SOAP e REST
Arquitetura SOAP e RESTArquitetura SOAP e REST
Arquitetura SOAP e RESTRhaniel
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistenciaRoberson Alves
 
Como instalar servidor web xampp
Como instalar servidor web xamppComo instalar servidor web xampp
Como instalar servidor web xampparnaldo vasquez
 
Manual de instalação do xampp
Manual de instalação do xamppManual de instalação do xampp
Manual de instalação do xamppZe'eduardo Silva
 
Como instalar o XAMPP no Micro
Como instalar o XAMPP no MicroComo instalar o XAMPP no Micro
Como instalar o XAMPP no MicroMarcio Okabe
 
Criando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpCriando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpJackson Meires
 
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaJoomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaTchelinux
 
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!Daniel Corrêa
 
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...jCursos
 
Gestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresGestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresHenriqueta Sofia Djalo
 
Google Cloud Messaging for Android
Google Cloud Messaging for AndroidGoogle Cloud Messaging for Android
Google Cloud Messaging for Androidedilsonmendes
 

Destaque (20)

Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...
Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...
Criando um Aplicativo Android para Consumir uma API RESTFul Desenvolvida em A...
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJatai
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o Android
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
Consuming RESTful services in PHP
Consuming RESTful services in PHPConsuming RESTful services in PHP
Consuming RESTful services in PHP
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSON
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Arquitetura SOAP e REST
Arquitetura SOAP e RESTArquitetura SOAP e REST
Arquitetura SOAP e REST
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistencia
 
Como instalar servidor web xampp
Como instalar servidor web xamppComo instalar servidor web xampp
Como instalar servidor web xampp
 
Manual de instalação do xampp
Manual de instalação do xamppManual de instalação do xampp
Manual de instalação do xampp
 
Como instalar o XAMPP no Micro
Como instalar o XAMPP no MicroComo instalar o XAMPP no Micro
Como instalar o XAMPP no Micro
 
Criando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla phpCriando Sites Dinamicos com Joomla php
Criando Sites Dinamicos com Joomla php
 
Como Instalar o Joomla no micro
Como Instalar o Joomla no microComo Instalar o Joomla no micro
Como Instalar o Joomla no micro
 
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina MadrugaJoomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
Joomla! para iniciantes - Djonatan Buss, Jerônimo Medina Madruga
 
Joomla! CMS
Joomla! CMSJoomla! CMS
Joomla! CMS
 
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!
Gestão de Conteúdo Web: Guia Básico Utilizando o Joomla!
 
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...
Criação de sites Joomla com CCKs e frameworks de template - Joomla Day Ribeir...
 
Gestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresGestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidores
 
Google Cloud Messaging for Android
Google Cloud Messaging for AndroidGoogle Cloud Messaging for Android
Google Cloud Messaging for Android
 

Semelhante a Consumindo dados via web service no android

Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETRenato Groff
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Web Services - Grupo F
Web Services - Grupo FWeb Services - Grupo F
Web Services - Grupo Fmdmansur
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EELuan Felipe Knebel
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETRenato Groff
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETRenato Groff
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSRodrigo Branas
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPEduardo Cesar
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!Lucas Brasilino
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 

Semelhante a Consumindo dados via web service no android (20)

Web service
Web serviceWeb service
Web service
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Web Services - Grupo F
Web Services - Grupo FWeb Services - Grupo F
Web Services - Grupo F
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Palestra Sobre REST
Palestra Sobre RESTPalestra Sobre REST
Palestra Sobre REST
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHP
 
Wsdl e uddi
Wsdl e uddiWsdl e uddi
Wsdl e uddi
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!
 
Web Services
Web ServicesWeb Services
Web Services
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 

Consumindo dados via web service no android

  • 1. Consumindo Web Service REST com Android Alexandre Antunes Bemobi & Portal Android
  • 2. Intodução ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ Necessidade de ter um aplicativo online; Por que utilizar um Web Service (Padrão x Solução Proprietária); Tipos de Web Service (SOAP x REST); Overview das API’s existentes (String x Volley); Formatos de notação de dados (JSON x XML); Transformando dados em objetos Java (Android JSON x google-gson); Comunicação eficiente; Transmitindo dados seguros; Implementando um simples REST Client.
  • 3. Necessidade de ter um aplicativo online
  • 4. Necessidade de ter um aplicativo online ➢ ➢ ➢ ➢ ➢ ➢ ➢ Guardar dados em nuvem; Sistema multiplataforma (web, desktop e mobile); Saber qual o interesse dos usuários que estão acessando a plataforma; Controle de acesso; Serviço customizado para cada cliente; Compartilhar ações/dados/eventos; Redes sociais (Facebook, twitter e Google+).
  • 5. Por que utilizar um Web Service (Protocolo Proprietário) ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ Identificadores de mensagens (sucesso e erro); Tipos de erros; Formato de dados (String??? Array de bytes??); Converter esses dados quando entram no sistema; Segurança (criptografia); Documentação do protocolo para implementação de terceiros; Debug; Custo; Tempo de desenvolvimento.
  • 6. Por que utilizar um Web Service (Padrão) ➢ ➢ São baseados em tecnologia padrão; HTTP como protocolo de comunicação; ○ ○ ➢ ➢ ➢ ➢ ➢ ➢ Headers; Status code; SSL para seguraça; Dados em XML ou JSON; Ferramentas que facilitam a conversão dos dados; Ferramentas de debug (SoapUi, Postman, REST Console e etc.); API’s pada Java (Jersey, CXF, Spring MVC e etc.); Praticamente todas as linguagens suportam a criação de um Web Service.
  • 7. Tipos de Web Service ➢ ➢ ➢ ➢ O Web Service foi criado para que aplicações desenvolvidas em linguagens diferentes possam se comunicar por meio de serviços (métodos) que são expostos para que outros sistemas possam acessálos. O objetivo dos Web Services é a comunicação de aplicações através da Internet. O W3C e OASIS são as instituições responsáveis pela padronização dos Web Services. Empresas como IBM, Microsoft e Sun apóiam o desenvolvimento desse padrão. Segundo o W3C um Web Service define-se como: um sistema projetado para suportar a interoperabilidade entre máquinas sobre rede.
  • 8. Tipos de Web Service (SOAP) ➢ ➢ ➢ O SOAP (Simple Object Access Protocol) baseia-se numa invocação remota de um método e para tal necessita especificar o endereço do componente, o nome do método e os argumentos para esse método. Os dados são formatados em XML com determinadas regras e enviados normalmente por HTTP. Não define ou impõe qualquer semântica, quer seja de modelo de programação, quer seja a semântica específica da implementação. Este aspecto é extremamente importante, pois permite que o serviço ou o cliente sejam aplicações desenvolvidas por diferentes linguagens.
  • 9. Tipos de Web Service (SOAP) ➢ ➢ O WSDL descreve os serviços disponibilizados à rede através de uma semântica XML, este providencia a documentação necessária para se chamar um sistema distribuído e o procedimento necessário para que esta cominicação se estabeleça. Enquanto o SOAP especifica a comunicação entre um cliente e um servidor, o WSDL descreve os serviços oferecidos.
  • 10. Tipos de Web Service (REST) ➢ ➢ ➢ ➢ REST é uma técnica de engenharia de software para sistemas distribuídos desenvolvida pelo Roy Fielding. A REST (Transferência de Estado Representativo) é pretendida como uma imagem do design da aplicação se comportará: uma rede de websites (um estado virtual), onde o usuário progride com uma aplicação selecionando as ligações (transição de estado), tendo como resultado a página seguinte (que representa o estado seguinte da aplicação) que está sendo tranferida ao usuário e apresentada para seu uso. Sistemas que seguem os princípios REST são conhecidos como RESTful. WADL.
  • 11. Tipos de Web Service (REST) ➢ ➢ ➢ O que é importante ter em mente é que o princial em um Web Service RESTful são as URLs do sistema e os resources. Um resource é um recurso, uma entidade, ou seja, é um objeto com informação que será representado por meio de um XML. Em geral, a URL para acessar esse recurso será sempre a mesma, porém caso mudemos o método HTTP (GET, POST, PUT e DELETE) o resultado da requisição será diferente. Método exemplo.com/recurso exemplo.com/recurso/1 GET Lista os recursos Detalhe de um recurso POST Adiciona um recurso - PUT - Atualiza um recurso DELETE - Remove um recurso
  • 12. Formatos de dados (JSON x XML) ➢ ➢ ➢ ➢ JSON e XML são formatos para a notação de dados a serem transmitidos; A maior e mais importante diferença entre eles, e o que importa para nós nesse momento, é que o XML acaba ocupando muito mais espaço que o JSON quando representam o mesmo objeto. Isso acontece porque o XML usa uma tag para identificar o inicio e o final de cada nó. O JSON é fortemente recomendado quando estamos falando de dispositivos móveis, por consumir menos banda da conexão de internet do usuário.
  • 13. Formatos de notação dados (JSON x XML)
  • 14. Spring ➢ O Spring é uma ferramenta bastante usada por desenvolvedores Java e não podia estar de fora quando falamos em Android. ➢ A ferramenta para android é bem leve e simples de usar, apresentando as seguintes funcionalidades principais: ○ Rest Client para Android; ○ Suporte a autenticação para APIs seguras. ➢ Ela está disponível tanto para Maven quanto para o Gradle. ➢ Como ela é modular, podemos usar apenas o que vamos precisar.
  • 15. Spring ➢ Maven <dependencies> <dependency> <groupId> org.springframework.android </groupId> <artifactId> spring-android-rest-template </artifactId> <version> 1.0.1.RELEASE </version> </dependency> </dependencies> ➢ Gradle dependencies { compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE' }
  • 16. Spring - Utilização ➢ Criamos o nosso POJO, que será exatamente o mapeamento no nosso JSON: Retorno do Servidor: POJO: { public class Cliente { private int id; private String nome; private String cpf; private String endereco; "cpf": "111222333-00", "endereco": "Rua das ruas, 9", "id": "1", "nome": "Alexandre Antunes" } //Getters and Setters }
  • 17. Spring - Utilização ➢ Para fazer o parse o Spring recomenda usar o Jackson, que é bastante usado e muito bom por sinal, mas normalmente é usado no lado do Servidor. <dependency> <groupId>com.fasterxml.jackson.core </groupId> <artifactId>jackson-databind </artifactId> <version>2.2.1</version> </dependency> ➢ A questão é avaliar o desempenho. Ele suporta as seguintes APIs para essa função: ○ ○ ○ Jackson JSON Processor; Jackson 2.x; Google Gson.
  • 18. Spring - Utilização ➢ Fazendo a requisição ao serviço: // Saber a URL do serviço String url = "http://10.0.2.2:8080/WebServiceREST/cliente/1"; // Criar uma instância do RestTemplate RestTemplate restTemplate = new RestTemplate(); // Dizer ao Spring que você quer usar o Jackson para fazer o parse do JSON restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); // Executar o mmétodo HTTP GET, fazendo o parse do JSON para o Objeto Cliente Cliente cliente = restTemplate.getForObject(url, Cliente.class); ➢ Agora só nos basta usar esse objeto para popular nossa “view”, salvar no banco ou qualquer outra coisa.
  • 19. Volley ➢ ➢ ➢ ➢ O Volley foi divulgado no Google I/O 2013; Basicamente ela serve para realizar requisições para a web com simplicidade e, o mais importante, rapidamente; Processamento das requisições e cache; Benefícios: ○ Gerencia automaticamente as requisições; ○ Cache em disco e memória; ○ Possibilidade de cancelar uma requisição; ○ Customização; ○ Debugging e tracing;
  • 20. Volley - Utilização ➢ Baixar o Volley no Git e incluir o código no seu projeto: git clone https://android.googlesource.com/platform/frameworks/volley ➢ Importando projetos do Git: http://www.technotalkative.com/android-import-android-projects-from-git/ ➢ Fazendo a requisição ao serviço: // Saber a URL do serviço String url = "http://10.0.2.2:8080/WebServiceREST/cliente/1"; // Criar uma instância do RequestQueue RequestQueue queue = Volley.newRequestQueue(this);
  • 21. Volley - Utilização // Criar uma instância do JsonObjectRequest, passando o método HTTP, a url, um callback de sucesso e um de erro. JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response. Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // TODO Incluir código de sucesso. // Usar a lib de JSON padrão ou o Gson para fazer o parse para o seu Objeto, // no nosso caso o objeto é o Cliente. Cliente cliente = parse(response); // Já veremos a implementação desse método. // Popular a View com o objeto Cliente. } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Incluir código para quando a requisição falhar. // Mostrar uma Dialog informando ao usuário o erro. } });
  • 22. Transformando dados em objetos Java Existem várias formas e APIs para fazer o parse de um JSON para um objeto, as mais importantes são: ➢ Jackson: ○ Não é tão simples de implementar; ○ Tem dezenas de funcionalidades; ○ Com o Spring pode ser bem simples. ➢ Nativo JSONObject: ○ Já vem no SDK do Android; ○ Simples de implementar, mas trabalhoso; ➢ Google Gson: ○ Também pode usar com o Spring; ○ A mais simples. Em uma linha o seu objeto está pronto para usar;
  • 23. Transformando dados em objetos Java ➢ Nativo JSONObject: private Cliente parse(JSONObject jsonObject) { Cliente cliente = new Cliente(); Retorno do Servidor: { try { cliente.setId(jsonObject.getString("id")); "cpf": "111222333-00", "endereco": "Rua das ruas, 9", cliente.setNome(jsonObject.getString("nome")); "id": "1", cliente.setCpf(jsonObject.getString("cpf")); "nome": "Alexandre Antunes" cliente.setEndereco(jsonObject.getString("endereco")); } catch (JSONException e) { e.printStackTrace(); } return cliente; } }
  • 24. Transformando dados em objetos Java ➢ Google Gson: private Cliente parse(JSONObject jsonObject) { Gson gson = new Gson(); Retorno do Servidor: { return gson.fromJson(jsonObject, Cliente.class); "cpf": "111222333-00", "endereco": "Rua das ruas, 9", } "id": "1", "nome": "Alexandre Antunes" }
  • 25. Spring x Volley Spring: ○ ➢ Volley ○ ○ ➢ Usa a thread atual para realizar a requisição (Como a partir da API level 11 do Android, não podemos mais executar tarefas demoradas na MainThread, é obrigatório que seja feito em uma thread separada (NetworkOnMainThreadException) - Recomendo o uso de uma AsyncTask para realizar essa função. Faz as requisições em uma nova thread; Implementa uma fila para as requisições. Ambos suportam HTTPS.
  • 28. Comunicação eficiente ➢ Sempre informar ao usuário que os dados estão sendo carregados; ➢ Evitar trafegar dados desnecessários; ➢ Evitar requisições repetidas; ➢ Quebrar retornos muito grandes em várias requisições (paginar); ➢ Carregar a tela de forma assíncrona(textos x imagens);
  • 29. Transmitindo dados seguros ➢ Autenticação (OAuth - token); ➢ Autorização (Áreas restritas); ➢ SSL (HTTPS);
  • 30. Implementando um simples REST Client no Android public class HttpClientSingleton { private static final int JSON_CONNECTION_TIMEOUT = 3000; private static final int JSON_SOCKET_TIMEOUT = 5000; private static HttpClientSingleton instance; private HttpParams httpParameters ; private DefaultHttpClient httpclient; private void setTimeOut(HttpParams params){ HttpConnectionParams.setConnectionTimeout(params, JSON_CONNECTION_TIMEOUT); HttpConnectionParams.setSoTimeout(params, JSON_SOCKET_TIMEOUT); } private HttpClientSingleton() { httpParameters = new BasicHttpParams(); setTimeOut(httpParameters); httpclient = new DefaultHttpClient(httpParameters); } public static DefaultHttpClient getHttpClientInstace(){ if(instance==null) instance = new HttpClientSingleton(); return instance.httpclient; } }
  • 31. Implementando um simples REST Client no Android public String[] get(String url) { String[] result = new String[2]; HttpGet httpget = new HttpGet(url); HttpResponse response; try { response = HttpClientSingleton.getHttpClientInstace().execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { result[0] = String.valueOf(response.getStatusLine().getStatusCode()); InputStream instream = entity.getContent(); result[1] = toString(instream); instream.close(); Log.i("get", "Result from post JsonPost : " + result[0] + " : " + result[1]); } } catch (Exception e) { Log.e("NGVL", "Falha ao acessar Web service", e); result[0] = "0"; result[1] = "Falha de rede!"; } return result; }
  • 32. Implementando um simples REST Client no Android private static final String URL_WS = "http://10.0.2.2:8080/WebServiceREST/cliente/"; public Cliente getCliente(int id) throws Exception { String[] resposta = new WebServiceCliente().get(URL_WS + id); if (resposta[0].equals("200")) { Gson gson = new Gson(); Cliente cliente = gson.fromJson(resposta[1], Cliente.class); return cliente; } else { throw new Exception(resposta[1]); } }
  • 33. Fontes ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ http://pt.wikipedia.org/wiki/Web_service#SOAP http://pt.wikipedia.org/wiki/REST http://en.wikipedia.org/wiki/Web_Application_Description_Language http://spring.io/guides/gs/consuming-rest-android/ http://docs.spring.io/spring-android/docs/1.0.x/reference/html/rest-template.html http://www.portalandroid.org/comunidade/viewforum.php?f=119 https://github.com/FasterXML/jackson http://developer.android.com/reference/org/json/JSONObject.html https://code.google.com/p/google-gson/ http://www.technotalkative.com/android-import-android-projects-from-git/ http://java.dzone.com/articles/android-%E2%80%93-volley-library https://android.googlesource.com/platform/frameworks/volley https://gist.github.com/ficusk/5474673 http://pt.wikipedia.org/wiki/JSON http://pt.wikipedia.org/wiki/XML
  • 34. Contato ➢ Alexandre Antunes ○ ○ ➢ Administrador do Portal Android; Membro organizador do GDG Rio de Janeiro; antunes@portalandroid.org