Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/03/2014, 08:10
beinat
 
Fecha de Ingreso: abril-2008
Mensajes: 64
Antigüedad: 16 años
Puntos: 2
Respuesta: error sockets

si perdon, me parece lo correcto, haya va una pequeña explicacion y la solucion.

Un Thread es una funcion encargada de crear algun proceso en segundo plano, este hilo no puede ni modificar ni insertar datos en el hilo principal(aplicacion) esto causaria error, para solucionar se utiliza el Handle.

El Handle es un puente que hay entre el hilo secundario(Thread) y el hilo principal(aplicacion).

Despues de esta pequeña aclaracion, os explico como solucione el problema.

En un principio teniamos esto:
Código Java:
Ver original
  1. public void leer(){
  2.             tv=(TextView)findViewById(R.id.textView);
  3.             Thread leer_hilo= new Thread(new Runnable() {
  4.                 @Override
  5.                 public void run() {
  6.                     try{
  7.      
  8.                         lector= new BufferedReader(new InputStreamReader(socket.getInputStream()));
  9.                         while(true){
  10.                             String mensaje_recibido=lector.readLine();
  11.                             Log.e("Leer","El mensaje recibido es: " + mensaje_recibido);
  12.                             tv.append("Cliente dice: " + mensaje_recibido + "\n");
  13.                         }
  14.                     }catch(Exception e){
  15.                         e.printStackTrace();
  16.                     }
  17.                 }
  18.             });
  19.             leer_hilo.start();
  20.         }

despues de conviertio en algo asi:

Código Java:
Ver original
  1. private Handler puente = new Handler(){
  2.         public void handleMessage(Message msg){
  3.             Log.e("Handler","el mensaje recibido es: " + msg.obj);
  4.             tv.append("Cliente dice. " + msg.obj.toString() + "\n");
  5.         }
  6.     };

Código Java:
Ver original
  1. public void leer(){
  2.         tv=(TextView)findViewById(R.id.textView);
  3.         Thread leer_hilo= new Thread(new Runnable() {
  4.             @Override
  5.             public void run() {
  6.                 try{
  7.  
  8.                     lector= new BufferedReader(new InputStreamReader(socket.getInputStream()));
  9.                     while(true){
  10.                         String mensaje_recibido=lector.readLine();
  11.                         Message msg = new Message();
  12.                         msg.obj=mensaje_recibido;
  13.                         puente.sendMessage(msg);
  14.                     }
  15.                 }catch(Exception e){
  16.                     e.printStackTrace();
  17.                 }
  18.             }
  19.         });
  20.         leer_hilo.start();
  21.     }

Obviamente hay que importar las librerias necesarioas, entre ellas las del Handler.

Código Javascript:
Ver original
  1. import android.os.Handler;

Resumiendo lo que hace es todo lo que se lee por el socket, se envia a la funcion Handle y este se encagar de escribir en la aplicacion.

Espero haberme explicado bien y que a alguien le sirva como referencia.

Un saludo.