Foros del Web » Programación para mayores de 30 ;) » Java »

Thread en aplicacion para dispositivo movil

Estas en el tema de Thread en aplicacion para dispositivo movil en el foro de Java en Foros del Web. Hola, estoy haciendo una aplicacion para un dispositivo movil y me ha surguido el siguiente problema: Tengo el programa principal que simplemente le pones una ...
  #1 (permalink)  
Antiguo 17/03/2007, 04:08
 
Fecha de Ingreso: febrero-2007
Mensajes: 23
Antigüedad: 17 años, 7 meses
Puntos: 0
Thread en aplicacion para dispositivo movil

Hola,
estoy haciendo una aplicacion para un dispositivo movil y me ha surguido el siguiente problema:
Tengo el programa principal que simplemente le pones una direccion proxy y va el dispositivo movil y se conecta.
He visto ejemplos y he visto que para conectarse es obligatorio separar el programa principal (midlet) con la conexion usando otro thread. Sino se bloquea. Entonces, he hexo una libreria que crea un nuevo thread y gestiona la conexion via httpconection o sockets.
Hasta ahi me ha ido bien, el problema me ha surguido cuando he querido que el thread del programa principal... se detuviese hasta que llegase la respuesta del proxy. Es decir,

Programa principal: clienteMidlet
.
.
con = new ConexionHttp(); //Nueva conexion
con.start();
Thread.sleep(120000);
//aqui se supone que ya tenemos la respuesta en una
//variable global de ConexionHttp y la consultamos
//mediante un metodo
String resp = con.getRespuesta();
System.out.println("la respuesta es -> "+resp);

El problema viene en el thread.sleep(). Cuando llega ahi se me vuelve a bloquear y nose pq... porque realmente el thread de la conexion sigue funcionando y este thread es el del clienteMidlet y solo quiero que se kede parado durante 2 minutos que seguramente despues de los dos minutos ya habra acabado el thread de la conexion y tendre la respuesta en la variable global.
No se si me he explicado muy bien :P
merci!
  #2 (permalink)  
Antiguo 19/03/2007, 16:58
 
Fecha de Ingreso: marzo-2006
Mensajes: 54
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Thread en aplicacion para dispositivo movil

en realidad no es obligatorio hacer la conexión en un hilo aparte, lo que sucede es que al realizar la conexión en el mismo hilo de ejecución del midlet si la conexión se demora o se cuelga vas a afectar a toda la aplicación y el usuario lo único q va a ver es una pantalla congelada.
lo usual es mostrarle al usuario algún Form q le notifique que se esta tratando de efectuar la conexión y lo imposibilite de ejecutar alguna acción "peligrosa" (por ejemplo darle de nuevo al botón 'Conectar')

si llamas a la función Thread.sleep(...) le estas diciendo al thread explicitamente q se bloquee durante el tiempo q pasas como parámetro, lo cual es exactamente lo que no quieres q suceda.

puedes resolver el problema (efectuar la conexión y obtener la respuesta) utilizando un patrón Observer. a groso modo quedaría algo así:

Código:
public interface HttpConnexionListener {
	public void onResponse( HttpConnResponse r );
}

public class ConexionHttp implements Runnable {
	private Vector<HttpConnexionListener> listeners;
	
	public void addHttpConnexionListener(HttpConnexionListener l) {
		listeners.add(l);
	}
	
	public void run(){
		// establecer la conexion
		// obtener la respuesta
		// crear un objeto HttpConnResponse
		HttpConnResponse response = ........
		// notificar a los listeners y enviarles la repuesta
		//  obtenida
		for (HttpConnexionListener hcl : listeners) {
			hcl.onResponse(response);
		}	
	}
}

public class MyMidlet extends MIDlet implements HttpConnexionListener {
	// codigo, codigo, codigo

	private WaitForm waitForm;	// la pantalla de espera

	private void conectar(){
		// mostramos la pantallita de espera
		Display.getDisplay(this).setCurrent(waitForm);

		con = new ConexionHttp(); //Nueva conexion
		// agragamos al midlet como un listener de la conexion
		//   de esta forma el midlet sera notificado cuando llegue
		//   una respuesta
		con.addHttpConnexionListener(this);
		con.start();	// iniciamos la conexion
	}

	// este metodo sera llamado por la conexion cuando tenga 
	//  una respuesta
	public void onResponse( HttpConnResponse r ) {
		procesarRespuesta(r);
	}
}
el codigo necesita un buen refinamiento pero la idea esta ahí.

de todas formas date un paseo por:
http://developers.sun.com/techtopics...es/threading2/
http://developers.sun.com/techtopics...les/threading/

saludos;

da_fr.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.