Question

J'ai besoin d'utiliser la connexion de prise TCP pour obtenir les données d'une boîte bleue, si je saisis un commentaire, tel que "getcolor", la Bluebox m'enverra les informations telles que "Rouge, Bleu". Dans ce cas, la Bluebox en tant que serveur et je n'ai pas besoin de programmer dessus, mais j'ai un problème de montrer les informations sur l'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();

}
}

Ce code Java fonctionne, mais il échoue dans le code Android ci-dessous:

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);

        }
}
}

Quel est le problème et comment définir un thread pour cela?Merci!

Était-ce utile?

La solution

Le problème, comme vous l'avez indiqué, est que vous faites la partie en réseau sur le fil principal.

Réglage d'un nouveau thread est facile, envisagez d'utiliser AsynccTask .Veuillez lire la documentation (qui est très bonne) avant de passer pour le mettre en œuvre, cela facilitera le plus facile IMHO.

En outre, assurez-vous de disposer d'une autorisation d'Internet dans votre AndroidManifest.xml

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top