Buscar

Programação DM Aula10 - 2012

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Aula 10- Comunicação Remota 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Conteúdo Programático desta aula 
 Aprender como realizar a comunicação remota com 
servidores via HTTP; 
 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
O FRAMEWORK GENÉRICO DE CONEXÃO 
 •Apesar das bibliotecas da plataforma Java Standard Edition para 
conectividade a rede possuírem recursos eficientes, devido as 
características limitadas de hardware, um dispositivo móvel poderia não 
suportar a quantidade de classes e interfaces presentes nos pacotes 
java.net e java.io e, por este motivo, esses pacotes foram simplificados e 
um framework genérico de conexão, também conhecido por GCF (Generic 
Connection Framework), foi desenvolvido para tratar assuntos de i/o 
(entrada e saída de dados) e conectividade. 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
O FRAMEWORK GENÉRICO DE CONEXÃO 
 •O GCF não tinha por objeto ser um novo conjunto de classes, mas sim 
proporcionar um subconjunto do JSE (Java Standard Edition) que estivesse 
em sintonia com as limitações e as variações que possam ser encontradas 
em dispositivos de aplicação MIDP, todavia, atualmente, você encontra o 
GCF não somente em dispositivos baseados em CLDC, como os que 
utilizam MIDP (Mobile Information Device Profile) e IMP (Information 
Module Profile), mas também em dispositivos que usam CDC (Connected 
Device Configuration). 
•Indo além, devido à padronização do uso, você também pode encontrar o 
GCF em um número crescente de pacotes opcionais, incluindo aqueles que 
proveem acesso a arquivos, suporte a Bluetooth e smart cards. 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
ESTRUTURA DO FRAMEWORK GENÉRICO DE CONEXÃO (GCF) 
•GCF possui uma estrutura simplificada de interfaces e classes para 
executar fluxos de entrada e saída de dados, seja para arquivos ou 
conexões (como HTTP, datagramas e soquetes). 
•GCF provê uma abordagem genérica para conectividade 
•provê um conjunto de APIs comuns para todos os tipos básicos de 
conectividade, seja para pacotes (blocos de dados) e para fluxos de 
entrada e saída (contínuos ou não). 
•A generalização é possível através da utilização de: 
•Uma interface hierárquica que pode ser estendida; 
•Uma fábrica de conexão; 
•Pela padronização da URL para indicar o tipo apropriado de conexão a 
ser criado. 
•Embora cada tipo de conexão tenha suas particularidades, para usar o 
GCF é muito simples, basta utilizar a classe Connector e uma URL para 
criar uma conexão. A classe Connector cria e abre o tipo de conexão 
apropriado de acordo com a URL que você especificar, desde que a URL 
seja suportada. 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Hierarquia da Generic Connection Framework Interface 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Criando uma conexão – Connection.open 
import java.io.IOException; 
import java.io.InputStream; 
import javax.microedition.io.ConnectionNotFoundException; 
import javax.microedition.io.Connector; 
import javax.microedition.io.SocketConnection; 
public class Conexao { 
 public void exemplo() { 
 String url = "socket://portal.estacio.br:80"; 
 SocketConnection c = null; 
 InputStream s = null; 
 try { 
 c = (SocketConnection)Connector.open(url); 
 s = c.openInputStream(); 
 // Ler e manipular o fluxo de entrada. 
 // ... 
 } catch (ConnectionNotFoundException cne) { 
 // Ocorre se a conexão especificada não puder ser criada. Tratar o erro. 
 } catch (IllegalArgumentException iae) { 
 // Ocorre se um dos argumentos estiver errado. 
 // Neste exemplo, o único argumento a ser aberto é a URL, 
 // assim os únicos erros possíveis são ConnectionNotFoundException 
 // ou IOException. Tratar erro. 
 } catch (IOException ioex) { 
 // Tratar erro. 
 } finally { 
 try { 
 if (null != s) { s.close(); } 
 if (null != c) { c.close(); } 
 } catch (Exception ex) { // Tratar erro. } } } } 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Abrindo uma Conexão 
O GCF suporta um grande número de tipos de conexões e as URLs são 
importantes para definir as regras da conexão, descrevendo a localização 
e o meio de acesso ao recurso desejado. O formato geral de uma URL, 
como definido na RFC 1738 (e depois na RFC 2396), é o seguinte: 
scheme://user:password@host:port/url-path;parameters , onde: 
 
scheme especifica o método ou o protocolo e define o tipo de 
conexão a ser usada; 
user é opcional e especifica uma conta (nome de usuário); 
password é opcional e especifica uma senha para uma conta; 
host é o local, nome ou o endereço IP a quem se destina a 
conexão; 
port é opcional e depende do esquema. Especifica a porta a ser 
utilizada na conexão; 
url-path é o caminho até o recurso, depende do esquema e pode 
possuir parâmetros. 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Abrindo uma Conexão - Observações 
Note que os delimitadores são requeridos em conformidade com cada 
parte do formato da URL e que os parâmetros opcionais devem contê-los 
quando estiverem presentes. Segue um exemplo de URL com parte dos 
parâmetros opcionais e respectivos delimitadores: 
 ftp://aluno:senha@portal.estacio.br/arquivos 
 Na API do GCF, a classe Connector define três modos para abrir a 
conexão, são eles: 
open(String url) 
open(String url, int mode) 
open(String url, int mode, boolean timeouts) 
A variável url descreve a URL para onde a conexão será criada. A variável 
mode descreve a forma como a conexão acontece, ou seja, READ, WRITE 
ou READ_WRITE (modo padrão). A variável timeouts indica que você quer 
ser avisado acerca de timouts (InterruptedIOException), desde que a 
conexão permita tal notificação (o aviso, por padrão, é desativado, ou 
seja, falso). 
 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Qual Conexão usar 
A forma mais comumente utilizada deste método é a primeira, ou seja, 
open(String url): 
 
 
// Cria um SocketConnection e um InputStream 
String url = "socket://portal.estacio.br:80"; 
SocketConnection c = 
(SocketConnection)Connector.open(url); 
InputStream s = c.openInputStream(); 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Os métodos da classe Connector 
A classe Connector também possui alguns métodos de conveniência para 
criação de vários tipos de fluxo de entrada e saída: 
 
•static DataInputStream openDataInputStream(String name) 
•static DataOutputStream openDataOutputStream(String name) 
•static InputStream openInputStream(String name) 
•static OutputStream openOutputStream(String name) 
 
Como esses métodos são estáticos, você consegue utilizar os objetos de 
fluxo de entrada e saída diretamente. 
 
// Create an InputStream 
String url = "socket://portal.estacio.br:80"; 
InputStream s = (InputConnection)Connector.openInputStream(url); 
 
 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Exemplos de conexões – classe Connector 
Criando uma conexão via soquete (SocketConnection): 
String url = "socket://portal.estacio.br:80"; 
SocketConnection c = (SocketConnection)Connector.open(url); 
Criando uma conexão via HTTP (HttpConnection):String url = "http://portal.estacio.br/portal"; 
HttpConnection c = (HttpConnection)Connector.open(url); 
Criando uma conexão a um arquivo de recurso (Foundation Profile e J2SE): 
String url = "file:///myResourceFile.res"; 
InputConnection c = (InputConnection)Connector.open(url); 
Criando uma conexão a um arquivo de recurso (FileConnection) (JSR 75): 
String url = "file:///myResourceFile.res"; 
FileConnection c = (FileConnection)Connector.open(url); 
Criando uma conexão via Datagrama UDP (DatagramConnection): 
String url = "datagram://portal.estacio.br:12345"; 
UDPDatagramConnection c = 
(UDPDatagramConnection)Connector.open(url); 
 
 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Os Scheme definidos pela JCP 
URL (scheme): Req. Conectividade: Tipo de con. GCF: 
btl2cap Não Bluetooth L2CAPConnection 
datagram Não Datagrama DatagramConnection 
File Não Acesso a arquivo FileConnection, InputConnection 
http Sim HyperText Transport Protocol HttpConnection 
https Sim Secure HyperText Transport Protocol HttpsConnection 
comm Não Serial I/O (Entrada e saída serial) CommConnection 
sms Não Short Messaging Service MessageConnection 
mms Não Multimedia Messaging Service 
cbs Não Cell Broadcast SMS 
apdu 
jcrmi 
Não Security Element (segurança) APDUConnection, 
JavaCardRMIConnection 
socket 
serversocket 
Não Socket (soquete) SocketConnection, 
ServerSocketConnection 
datagram Não UDP Datagram (Datagrama UDP) UDPDatagramConnection 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Fechando uma conexão 
Para fechar uma conexão basta chamar o método close. No exemplo a 
seguir, assumindo que você tenha uma conexão em uma variável de nome 
c, faríamos o seguinte: 
 
 
 
try { 
 if (null != c) { 
 c.close(); 
 c = null; 
 } 
} catch (IOException ioex) { 
 // Tratar ou ignorar o erro. 
} 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Enviando e recebendo dados por uma conexão 
o método baixarConteudo possui uma variável de objeto chamada is 
(InputStream) que é a responsável pela recepção dos dados do servidor, 
pois através da referência de conexão (is = c.openInputStream()) com o 
servidor é criado o vínculo que recebe os dados. Por fim, o método 
processarRespostaServidor transfere os dados recebidos para a variável 
conteudo quando a resposta do servidor for HTTP_OK: 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Enviando e recebendo dados por uma conexão 
public String baixarConteudo() throws IOException { 
 HttpConnection c = null; 
 InputStream is = null; 
 OutputStream os = null; 
 int codigoRetorno = 0; 
 String _url = this.url; 
 boolean permitirLoop = false; 
 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Enviando e recebendo dados por uma conexão 
do { 
 permitirLoop = !permitirLoop; 
 this.conteudo.delete(0, this.conteudo.length()); 
 try { 
 switch (this.modoEnvio) { 
 case GET: 
 StringBuffer urlParam = new StringBuffer(); 
 urlParam.append(_url); 
 if (null != this.parametros) { 
 urlParam.append("?"); 
 urlParam.append(this.parametros); 
 } 
 c = (HttpConnection)Connector.open(urlParam.toString()); 
 c.setRequestMethod(HttpConnection.GET); 
 break; 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Enviando e recebendo dados por uma conexão 
case POST: 
 default: 
 c = (HttpConnection) Connector.open(_url); 
 c.setRequestMethod(HttpConnection.POST); 
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
 // c.setRequestProperty("Connection", "close"); 
 String params = this.parametros; 
 if ((null != params) && (0 < params.length())) { 
 os = c.openOutputStream(); 
 os.write(params.getBytes()); 
 // os.flush(); 
 } 
 } 
 is = c.openInputStream(); 
 codigoRetorno = this.processarRespostaServidor(c, is); 
 _url = c.getHeaderField("Location"); 
 } 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Enviando e recebendo dados por uma conexão 
finally { 
 try { 
 if (null != os) { 
 os.close(); } 
 } catch (Exception ex) { } 
 try { 
 if (null != is) { 
 is.close(); } 
 } catch (Exception ex) { } 
 try { 
 if (null != c) { 
 c.close(); } 
 } catch (Exception ex) { } } 
 } while ((permitirLoop) && (300 <= codigoRetorno) && (307 >= 
codigoRetorno)); 
 return this.conteudo.toString(); 
 } 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Para testar Este código 
Crie um novo projeto no IDE NetBeans, depois crie uma classe chamada 
ConexaoHttp e copie o código para ela. 
Por fim, crie uma “MIDlet visual” e vá ao botão “Fluxo”, acrescente um objeto 
de “Alerta” (Alert) e inclua um “menu OK” (Command) que acione a seguinte 
codificação: 
 ConexaoHttp conexaoHttp = new 
ConexaoHttp(this.urlSiteTextField.getString()); 
try { 
 conexaoHttp.setParametros("nome=Michel&idade=36", 
ConexaoHttp.POST); 
 conexaoHttp.baixarConteudo(); 
 this.getAlert().setString(conexaoHttp.getConteudoBaixado()); 
} catch (Exception ex) { 
 this.getAlert().setString("Erro: " + ex.getMessage()); 
} 
switchDisplayable(getAlert(), getForm()); 
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Fim.

Outros materiais