Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Aula 10- Comunicação Remota Tema da Apresentação 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; Tema da Apresentação 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. Tema da Apresentação 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. Tema da Apresentação 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. Tema da Apresentação CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS * Hierarquia da Generic Connection Framework Interface Tema da Apresentação CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS * Criando uma conexão – Connection.open Tema da Apresentação 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. Tema da Apresentação 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). Tema da Apresentação 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): Tema da Apresentação 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); Tema da Apresentação 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); Tema da Apresentação CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS * Os Scheme definidos pela JCP Tema da Apresentação 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: Tema da Apresentação 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: Tema da Apresentação 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; Tema da Apresentação 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; Tema da Apresentação 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"); } Tema da Apresentação 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(); } Tema da Apresentação 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: Tema da Apresentação CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS * Fim. Tema da Apresentação
Compartilhar