Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/05/2010, 12:35
fireguy85x
 
Fecha de Ingreso: agosto-2008
Mensajes: 5
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: [J2ME] Conexión HTTP con netBeans 6.5

Hola, ya se que el post es antiguo, pero por si alguien da con el...

Tambien tuve este problema y lo solucione haciendo una clase PantallaEspera que era la que extendia a Thread y donde se ejecutaba el hilo que establecia la conexión http.

- El problema: Al ejecutar la conexión http desde el hilo principal, cuando aparece el dialogo para confirmar la conexión http, la aplicación no recibe las pulsaciones de tecla de ese hilo, pues está centrado en el principal.

- La solución: Al crear una clase pantallaEspera que extiende Thread y Canvas, al pintar la pantalla con esa clase, la aplicación recibe las pulsaciones de tecla que se producen mientras se esta navegando por esa pantalla, y como el run() necesario para la conexión http es un metodo de esta clase, pues detecta que hemos pulsado el botón "si" para confirmar la conexion a internet.

Es dificil de explicar, aqui dejo el codigo.


//CLASE PANTALLA ESPERA
public class PantallaEspera extends Canvas implements CommandListener,Runnable{


private Font texto;
private Inicio midlet;
private Command salir;
private Image imagen;
private Thread t;
private String tipo,url;
private Conexion conexion;
private int id_zona;
private boolean continuar=true;

PantallaEspera(Inicio inicio){
conexion=new Conexion();

this.midlet=inicio;

salir=new Command("Salir",Command.EXIT,1);
texto=Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);


try{
System.out.println("Exito imagen");
imagen=Image.createImage("/imagenes/loading.gif");
} catch (IOException e) {
System.out.println("Error imagen");
e.printStackTrace();
}

this.addCommand(salir);
this.setCommandListener(this);
}
// AQUI PINTO LA PANTALLA DE ESPERA Y EJECUTO EL RUN()
protected void paint(Graphics g){
g.setGrayScale(255);
g.fillRect(0,0, getWidth(), getHeight());
g.setGrayScale(0);

g.drawImage(imagen,getWidth()/2,getHeight()/20, Graphics.TOP|Graphics.HCENTER);

g.setFont(texto);
g.drawString("Espere...", getWidth()/2,
getHeight()/2, Graphics.BASELINE|Graphics.HCENTER);

if (continuar)
{
continuar=false;
t=new Thread (this);
t.start();
}
}

public void commandAction(Command c, Displayable d) {
if(c==salir){
midlet.salir();
}
}

public void setTipo(String tipo){
this.tipo=tipo;
}


//AQUI ESTABLEZCO CONEXION CON LA CONEXIÓN
public void run() {
System.out.println("Ha exo el run para conexion");

String base = "http://www.miweb.es";

conectarLogin();
String respuesta = conexion.getRespuesta();
}
}





//CONEXION SIN EXTENDER THREAD
public void conectar(String url){
this.url=url;
System.out.println(url);
try{
c =(HttpConnection)Connector.open(this.url);
c.setRequestProperty("Content-Language","es-ES");
c.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");
c.setRequestProperty("Connection","close");
c.setRequestMethod(HttpConnection.GET);

InputStream is = c.openInputStream();
procesarRespuesta(c,is);
//c.close();
}
catch (Exception e){
System.out.println(e);
}
}


public synchronized void procesarRespuesta(HttpConnection http, InputStream inst)throws IOException{

if (http.getResponseCode() == HttpConnection.HTTP_OK){
System.out.println("Conexion correcta");
int lon = (int) http.getLength();

if (lon != -1){
byte datos[] = new byte[lon];
inst.read(datos,0,datos.length);
respuesta = new String(datos);
}
else{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch;
while ((ch = inst.read()) != -1)
baos.write(ch);
respuesta = new String(baos.toByteArray());
baos.close();
}
}
else{
System.out.println(http.getResponseMessage());
}
}

public synchronized String getRespuesta(){
return respuesta;
}