Enviando dados com interface 1 Classe Form – é um repositório de controles, sendo que apenas um Form pode ser visto de cada vez. Cada objeto da classe Form pode conter vários controles. Classe TextField – permite a criação de campos de texto, podem ser utilizadas dentro de um objeto da classe Form. Classe Display – determina qual elemento está sendo visualizado no momento. Podemos, por exemplo, pedir para exibir um Form ou um TextField. Classe Command – permite criar objetos que irão chamar o método public void commandAction(Command c, Displayable s). Neste exercício ele será um item de menu associado a um dos botões do celular. Classe Thread – permite a criação de objetos que tenham fluxos de instruções separados do programa principal. Em sistemas multiprocessados, permite que o programa seja executado em diferentes processadores. Em sistemas monoprocessados, cada fluxo (Thread) utiliza fatias do tempo do processador. Modifique a declaração da classe para que ela fique assim: public class PhpSendInterface extends MIDlet implements CommandListener No escopo da classe PhpSendInterface, declare as seguintes variáveis: private Display exibir = null; private Form formularioDados; private TextField campoRA; //Declare também campoNome e campoRetorno private String URL = "http://www.roger.pro.br/phoo2/aula06/"; No construtor da classe, atribua os valores para as variáveis declaradas: exibir = Display.getDisplay(this); formularioDados = new Form("Cadastro de Alunos:"); campoRA = new TextField("RA:", "", 5, TextField.NUMERIC); //faça o mesmo para outras variáveis TextField formularioDados.append(campoRA); //para os outros campos também! //A próxima linha está explicada no próximo slide. formularioDados.addCommand(sendCommand); formularioDados.setCommandListener(this); Provavelmente você deve ter visto o erro ao programar para o slide anterior. O motivo (caso não exista outro erro) é que não criamos um objeto da classe Command, declare a variável e defina o valor, no escopo da classe: Command sendCommand = new Command("ENVIAR", Command.ITEM, 1); Vamos agora criar o método que vai capturar os comandos: private Enviar nfe; public void commandAction(Command c, Displayable s) { if(c==sendCommand){ campoRetorno.setString("Aguarde..."); String URLCommand=URL+"enviandodados.php"+"?ra=" + campoRA.getString() + "&nome=" + Utf.Encode(campoNome.getString()); nfe = new Enviar(URLCommand,campoRetorno ); nfe.start(); } } Veja que não temos defino o que é Utf.Encode e em o que é enviar. Utf.Encode é uma classe com um método estático(??????) que irá codificar os caracteres para poder enviar a requisição http para o servidor. O objeto envio vai ser um objeto que irá criar uma Thread(novo fluxo de execução) Para criarmos as novas classes, clique com o botão direito sobre o pacote que contém a classe PhpSendInterface, e selecione New->Other->Class. Faça isso duas vezes para criar as classes Utf e Enviar. public class Utf { public static String Encode(String s){ if (s!=null) { StringBuffer tmp = new StringBuffer(); int i=0; try { while (true) { int b = (int)s.charAt(i++); if ((b>=0x30 && b<=0x39) || (b>=0x41 && b<=0x5A) || (b>=0x61 && b<=0x7A)) { tmp.append((char)b); } else { tmp.append("%"); if (b <= 0xf) tmp.append("0"); tmp.append(Integer.toHexString(b)); } } } catch (Exception e) {} return tmp.toString(); } return null; } } import java.io.InputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.TextField; public class thsend extends Thread { String URL;//url onde está o php TextField Retorno;//armazena referência ao campo de texto public thsend(String URL,TextField Retorno){//método construtor this.URL=URL; this.Retorno=Retorno; } public void run() {// é executado quando é chamado o start() try { HttpConnection http = null; http = (HttpConnection) Connector.open(URL); http.setRequestMethod(HttpConnection.GET); //******************************************* //pegando a mensagem que veio pelo echo do php String stringBuffer=""; InputStream is = null; is = http.openDataInputStream(); int ch; while ((ch = is.read()) != -1) { //lê todos os caracteres retornados stringBuffer+=(char) ch; } this.Retorno.setString(stringBuffer);//exibir no campo de texto do Form o resultado da consulta //********************************************** if(http != null) http.close(); //close connection } catch (Exception e) { this.Retorno.setString(e.toString());//exibir no campo de texto do Form caso ocorra erro na conexão } }}