Problemas com HttpConnection

9 respostas
E

Olá pessoal,

Estou tentando desenvolver um Midlet que interage com um servlet. Estou usando o netbeans com 2 projetos um WEB e o outro mobile.

Tenho testado da seguinte forma:

Starto o tomcat e depois rodo o midlet, passando a url com “localhost\contexto\servlet”, via HttpConnection.

Quando chega na linha de comando q abri a conexão
"(HttpConnection) Connector.open(url);", a execução para e ñ acontece nada.

Nem menssagem de erro, no console aparece “programa is running”

O q pode ser?

desde já agradeço a todos!

9 Respostas

acopiara

Realmente não é para acontecer nada, você tem que trabalhar com o fluxo. Ex: DataInputStream e OutPutStream

Valeu

E

vou tentar ser mais claro :slight_smile:

No Emulador aparece par eu escolher se quero usar recursos rede ai escolho sim e da isso,a execução para, ou seja ñ acontece nada.

adriano.ferranti

O comando open apenas vai abrir a conexão, como o colega acima falou, você tem que enviar/receber dados através do DataOutputStream e DataInputStream

HttpConnection c = (HttpConnection) Connector.open(loadDocumentsUrl);
c.setRequestProperty("User-Agent","Profile/MIDP-1.0, Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language","en-US");
c.setRequestMethod(HttpConnection.POST);
                
DataOutputStream os = (DataOutputStream)c.openDataOutputStream();
                
//Enviando "1" apenas para demonstrar
os.writeUTF("1"); 

os.flush();
os.close();
E

To ligado disso ae, o problema é que a execução chega nessa linha e para sacou, tipo ñ abre a conexão. Tem alguma configuração no emulador ou no proprio netbeans pra usar o httpConnection ou algo do tipo?

alex_sandro_formigar

ola !!!
da uma olhada deste topico !
http://guj.com.br/posts/list/59826.java

ve se você pode tirar proveito deste topico de HttpConnection

falow !

E

Obrigado pela tentativa, mas eu tinha visitado esse topico antes. A mensagem é no emulador, quando tento abrir a conexão.

“nome do projeto mobile” wants to send and
receive data using the network.
This will use airtime and may result in changes

Iit is ok to use airtime?

escolhendo sim ou ñ, ñ acontece nada.

E

Ae galera consegui,

Fix a conexão e transmissão de dados em uma Thread, funcionou blz

obrigado pelas dicas

_

Estou com o mesmo problema, o emulador trava no mesmo ponto que você informou…

Poderia postar como se implementa a thread neste caso?

agradeço.

_

Bem, consegui resolver o problema, e vou postar aqui, caso sirva para alguem...

o problema da conexão, era que eu tentava conectar ao servidor pela thread principal.

a solução foi a seguinte...

retirei a minha conexão da MIDlet. que possuia esse código (enxuto):

import LoginConnect;

public class LoginMidlet extends MIDlet implements CommandListener {
   public Display display;
   private TextField userName;
   private TextField password;
   private Form form;
   private Command cancel;
   private Command login;
      
   public LoginMidlet() {
      userName = new TextField("LoginID:", "", 10, TextField.ANY);
      password = new TextField("Password:", "", 10, TextField.PASSWORD);
      form = new Form("Sign in");
      cancel = new Command("Cancel", Command.CANCEL, 2);
      login = new Command("Login", Command.OK, 2);
   }

   public void startApp() {
      display = Display.getDisplay(this);
      form.append(userName);
      form.append(password);
      form.addCommand(cancel);
      form.addCommand(login);
      form.setCommandListener(this);
      display.setCurrent(form);
   }

   public void pauseApp() {
   }

   public void destroyApp(boolean unconditional) {
      notifyDestroyed();
   }

   public void validateUser(String name, String password) {
     if (name.equals("igor") && password.equals("1234")) {
       
       Runnable r = new LoginConnect();
       Thread t1 = new Thread(r);
       t1.start();
       
     } else {
       tryAgain();
     }
   }     

   public void tryAgain() {
     Alert error = new Alert("Login Incorrect", "Please try again", null, AlertType.ERROR);
     error.setTimeout(Alert.FOREVER);
     userName.setString("");
     password.setString("");
     display.setCurrent(error, form);
   }

   public void commandAction(Command c, Displayable d) {
      String label = c.getLabel();
      if(label.equals("Cancel")) {
        destroyApp(true);
      } else if(label.equals("Login")) {
         validateUser(userName.getString(), password.getString());
      }
   }
}

e criei uma outra classe implementando runnable...

ai vai a ajuda:
public class LoginConnect implements Runnable {

  public Display display2;  
  
  String url = "http://localhost/biblioteca/pesquisa3.php?txtUsuario=200479057&txtSenha=1234";
  
  public void run(){
      
      StreamConnection streamConnection = null;  
      InputStream inputStream = null;  
      StringBuffer b = new StringBuffer();  
      
      TextBox textBox = null;
      try{
      streamConnection = (StreamConnection)Connector.open(url);  
      inputStream = streamConnection.openInputStream();  
       int ch;
         while((ch = inputStream.read()) != -1) {  
            b.append((char) ch);  
         } 
        textBox = new TextBox("Aluno Cadastrado", b.toString() , 1024, 0); 
      } catch(Exception e) {
       
      }finally{
        if(inputStream != null) {  
            try {
              inputStream.close();
            } catch (IOException e) {
              e.printStackTrace();
            }  
         }  
         if(streamConnection != null) {  
            try {
              streamConnection.close();
            } catch (IOException e) {
              e.printStackTrace();
            }  
         }  
      }          
      display2.setCurrent(textBox);      
  }

}

bem, aqui eu implementei os comandos do meu metodo run, que é acionado assim que eu clico o botão 'Login' da minha MIDlet.

simples.

bem, no meu caso a conexão foi aberta, ainda nao resolvi meu problema porque meus forms, estão confusos...mas, esses são outros problemas.

Criado 26 de maio de 2007
Ultima resposta 2 de ago. de 2007
Respostas 9
Participantes 5