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
}
}}
Download

private