Foros del Web » Programando para Internet » Android »

error sockets

Estas en el tema de error sockets en el foro de Android en Foros del Web. hola buenas: Estoy realizando una aplicacion para android con Android Studio y quiero realizar una pequeña aplicacion de cliente-servidor con sockets enviado mensajes de texto, ...
  #1 (permalink)  
Antiguo 18/03/2014, 05:17
 
Fecha de Ingreso: abril-2008
Mensajes: 64
Antigüedad: 16 años
Puntos: 2
error sockets

hola buenas:

Estoy realizando una aplicacion para android con Android Studio y quiero realizar una pequeña aplicacion de cliente-servidor con sockets enviado mensajes de texto, el escribir lo consigo desde dos terminales pero a la hora de recibir de sale el siguiente error: "android.view.ViewRoot$CalledFromWrongThreadExcept ion: Only the original thread that created a view hierarchy can touch its views."

creo que se refiere a cuando intento escribirlo en el texto, pero no estoy seguro, pongo el codigo que tengo para leer, haber si alguien sabe algo al respecto.

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.     }

Muchas gracias por cualquier ayuda y tiempo.

Un saludo
  #2 (permalink)  
Antiguo 18/03/2014, 07:10
 
Fecha de Ingreso: abril-2008
Mensajes: 64
Antigüedad: 16 años
Puntos: 2
Respuesta: error sockets

ya e conseguido solucionar el probremilla, asi que asunto cerrado.

Muchas gracias a los que han intentando ayudar
  #3 (permalink)  
Antiguo 18/03/2014, 07:58
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: error sockets

Por favor, postea la solucion, le puede servir a alguien mas adelante.
__________________
Aprendiendo!!!
  #4 (permalink)  
Antiguo 18/03/2014, 08:10
 
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.

Etiquetas: androi, aplicacion, app, sockets, view
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 02:31.