Pregunta

Necesito usar la conexión del socket TCP para obtener los datos de un BlueBox, si ingreso un comentario, como "GetColor", la caja de BlueBox me enviará la información como "Rojo, Blue". En este caso, la caja de BlueBox como un servidor y no necesito programarlo, pero tengo problemas para mostrar la información en el EDITTEXT.

public class sender {
public static void main(String[] args)throws IOException{

        Socket socket = new Socket("192.168.1.176",14111);

        OutputStream out = socket.getOutputStream();

        BufferedReader msg = new BufferedReader(new InputStreamReader(System.in)); 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));         
         PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);

         String buffer = new String("");
         String ms = "";
      while(true)
      {
          while(in.ready())

              buffer+= in.readLine()+ "\n";
          String[] line = buffer.split("\n");

          while(msg.ready())
              ms = msg.readLine();
          if(ms.equals("exit"))
          {
              break;
          }
          if(!ms.equals(""))
          {
              ou.println(ms);
              ou.flush();
              ms = "";
          }
          if(!buffer.equals(""))
          {

              System.out.print(buffer);
              buffer = "";

          }

      } 

      in.close();
      out.close();
      socket.close();

}
}

Este código Java funciona, pero falla en el código Android a continuación:

public class BlueBoxApp extends Activity {
/** Called when the activity is first created. */

Context appInstance = this;
private EditText info;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
           info = (EditText)findViewById(R.id.EditText01);
    try{

        InetAddress serverAddr = InetAddress.getByName("192.168.1.176");//TCP服务器IP地址

            Log.d("TCP", "server,receiving...");

          Socket socket = new Socket(serverAddr,14111);


           try {   


           OutputStream out = socket.getOutputStream();
           BufferedReader msg = new BufferedReader(new InputStreamReader(System.in)); 
           BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));          
         PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);

            String buffer = new String("");
            String ms = "getsensorno";
            Log.d("TCP", "sending:'"+ms+"'");
        while(true)
        {
          while(in.ready())

              buffer+= in.readLine()+ "\n";

          while(msg.ready())
              ms = msg.readLine();
          if(ms.equals("exit"))
          {
              break;
          }
          if(!ms.equals(""))
          {
              ou.println(ms);
              ou.flush();
              ms = "";
          }
          if(!buffer.equals(""))
          {

             info.setText(buffer);
            buffer = "";

          } 
        } 

            } catch (Exception e) {

            Log.e("TCP", "error",e);

        }finally{

            socket.close();

        }

        }catch(Exception e){

           Log.e("TCP", "error",e);

        }
}
}

¿Cuál es el problema y cómo configurar un hilo para ello?¡Gracias!

¿Fue útil?

Solución

El problema, como lo indicó, es que está realizando la parte de red en el hilo principal.

Configuración de un nuevo hilo es fácil, considere usar asintsk .Lea la documentación (que es muy buena) antes de saltar para implementarlo, lo hará mucho más fácil.

Además, asegúrese de tener permiso de Internet en su androidmanifest.xml

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top