Estou com problema ao abrir uma conexão HTTP. No emulador ao iniciar a conexão ele pergunta blza se quer conectar a tal endereço, aperto em YES pra confirmar só que trava a aplicação vou postar o codigo abaixo, quem puder ajudar agradeço desde já!!
package vendas;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
public class RetornaDados implements Runnable{
private boolean statusThread;
private String dados;
public RetornaDados() {}
public String getDados(){
statusThread = true;
new Thread(this).start();
while(statusThread){
try {
Thread.sleep(1000);
} catch (Exception e) {
e.getMessage();
}
}
return dados;
}
public void run(){
System.out.println("INICIANDO Thread");
HttpConnection httpConn = null;
InputStream is = null;
try {
System.out.println("PREPARANDO PRA CONECTAR");
httpConn = (HttpConnection)Connector.open("http://192.168.15.106/ret.php?module=cliente");
// System.out.println("Conexão Aberta");
httpConn.setRequestMethod(HttpConnection.GET);
httpConn.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC 1.1");
// httpConn.setRequestProperty("Connection", "close");
is = httpConn.openInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch;
//ch recebe os bytes
while((ch = is.read()) != -1){
baos.write(ch);
}
dados = new String(baos.toByteArray());
} catch (Exception e) {
System.out.println("Erro Inespeado: " + e.getMessage());
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(httpConn != null){
try {
httpConn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
statusThread = false;
}
}
Eu tive o mesmo problema. Se você testar em outros emuladores (Nokia, Motorola, etc) ele funciona e no celular também. Mas para funcionar no emulador do WTK você tem que fazer a conexão dentro de uma Thread separada só para ela.
Eu vi este exemplo no fórum do GUJ postado pelo usuário conhecido como julgado:
Parte que chama a conexao
new Thread(new Runnable() {
public void run(){
// NomeForm = "formResChamado";
url = "http://localhost/teste2.php?Vid_reschamado="+txt_Resolucao.getString();
try{
getConsulta(url);
}catch (IOException e) {
//alerta.setString(e.getMessage());
System.out.println(e.getMessage());
alerta.setType(AlertType.WARNING);
alerta.setTimeout(Alert.FOREVER);
}
}
}).start();
O metodo getConsulta
if(status == HttpConnection.HTTP_OK){
con.close();
while((ch = inputStream.read()) != -1) {
b.append((char) ch);
}
for(int i = 0;i<b.toString().length();i++){
if(b.toString().substring(i,i+1).equals("%")){
nome = aux;
aux = "";
i++;
} if (b.toString().substring(i,i+1).equals("#")) {
endereco = aux;
aux = "";
try {
Chamado Ch = new Chamado();
Ch.setCliNome(nome);
Ch.setCliCod(Integer.parseInt(endereco));
Ch.save();
aux = "";
}
catch (Exception e) {
e.printStackTrace();
}
} else {
aux = aux+b.toString().substring(i,i+1);
}
}
if(con != null) {
con.close();
}
Isso me ajudou… espero que ajude a você também.>
O Engraçado que eu tenho outras MIDlets aqui que conecto da mesma forma sem precisar colocar a conexão separada em uma Thread
da uma olhada:
........
public void commandAction(Command c, Displayable d){
if(d == frmMain){
if(c == cmdExit){
try {
destroyApp(true);
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(c == cmdSearch){
new Thread(this).start();
}
}
}
public void run(){
//Cria o atributo para conexão
HttpConnection httpConn = null;
//Cria o atributo para receber os bytes
InputStream is = null;
try {
//Abro a conexão passando a url e o texto de pesquisa
httpConn = (HttpConnection)Connector.open(URL+txtSearch.getString());
System.out.println("Conectado!");
//Informo o tipo de metodo vou utilizar para enviar as informações
httpConn.setRequestMethod(HttpConnection.GET);
//Informo ao servidor a especificação do meu aplicativo
httpConn.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC 1.1");
//Informo ao servidor que quando receber os dados ele feche a conexão
httpConn.setRequestProperty("Connection", "close");
//Abre o fluxo de dados
is = httpConn.openInputStream();
//Vai armazenar os bytes recebidos
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//Recebe os bytes de is
int ch;
//Ch recebe os dados lidos da conexão
// e enquando não for menor que menos um alimenta baos
while((ch = is.read()) != -1){
baos.write(ch);
}
//Crio uma nova string recebendo os dados amarzenados em baos
String str = new String(baos.toByteArray());
strTranslation.setText(removeHtml(str));
} catch (Exception e) {
strTranslation.setText("Erro inesperado: " + e.getMessage());
}
finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(httpConn != null){
try {
httpConn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}