2013-06-03 4 views
-1

J'ai un serveur socket android, qui envoie juste "bonjour" aux clients au démarrage. J'ai besoin d'envoyer "bonjour" chaque fois que l'on clique sur un bouton. i ajouté le code pour le bouton, l'intérieur de la boucle while, les crashed.pls app aider (je ne veux pas afficher les données entrantes)serveur android: envoyer des données lorsque le bouton est cliqué

public class MainActivity extends Activity { 
    TextView textView1; 
    final Button b1 = (Button) findViewById(R.id.button1); 

    static String SERVER_IP; 
    static final int SERVER_PORT = 5000; 

    Handler handler = new Handler(); 
    ServerSocket serverSocket; 




    //---get the local IPv4 address--- 
    public String getLocalIpv4Address() { 
     try { 
      for (Enumeration<NetworkInterface> networkInterfaceEnum = NetworkInterface 
        .getNetworkInterfaces(); networkInterfaceEnum 
        .hasMoreElements();) { 
       NetworkInterface networkInterface = networkInterfaceEnum 
         .nextElement(); 
       for (Enumeration<InetAddress> ipAddressEnum = networkInterface 
         .getInetAddresses(); ipAddressEnum.hasMoreElements();) { 
        InetAddress inetAddress = (InetAddress) ipAddressEnum 
          .nextElement(); 
        // ---check that it is not a loopback address and 
        // it is IPv4--- 
        if (!inetAddress.isLoopbackAddress() 
          && InetAddressUtils.isIPv4Address(inetAddress 
            .getHostAddress())) { 
         return inetAddress.getHostAddress(); 
        } 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e("IPAddress", ex.toString()); 
     } 
     return null; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //---make the TextView scrollable--- 
     textView1 = (TextView) findViewById(R.id.textView1); 
     textView1.setMovementMethod(new ScrollingMovementMethod()); 
    } 



    public class ServerThread implements Runnable { 
     public void run() { 

      try { 
       if (SERVER_IP != null) { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          textView1.setText(textView1.getText() 
            + "Server listening on IP: " + SERVER_IP 
            + "\n"); 
         } 
        }); 

        //---create an instance of the server socket--- 
        serverSocket = new ServerSocket(SERVER_PORT); 

        while (true) { 
         //---wait for incoming clients--- 
         Socket client = serverSocket.accept(); 

         //---the above code is a blocking call; 
         // i.e. it will block until a client connects--- 

         //---client has connected--- 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           textView1.setText(textView1.getText() 
             + "Connected to client." + "\n"); 
          } 
         }); 





         try { 
          //---get an InputStream object to read from the 
          // socket--- 
          //DataInputStream dataInputStream=new DataInputStream(client.getInputStream()); 
          //String line=dataInputStream.toString(); 
          //textView1.setText(line); 

          final DataOutputStream dataOutputStream = new DataOutputStream(client.getOutputStream()); 
          dataOutputStream.writeChars("hello"); 






          /*BufferedReader br = new BufferedReader(
            new InputStreamReader(
              client.getInputStream())); 

          OutputStream outputStream = 
            client.getOutputStream(); 


          //---read all incoming data terminated with a \n 
          // char--- 
          //String line = null; 
          //while ((line = br.readLine()) != null) { 
           //final String strReceived = line; 

           //---send whatever you received back to the 
           // client--- 
           //String s = line + "\n"; 
           //DataOutputStream saj=new DataOutputStream(); 

           //outputStream.write(s.getBytes()); 

           /*handler.post(new Runnable() { 
            @Override 
            public void run() { 
             textView1.setText(textView1.getText() 
               + strReceived + "\n"); 
            } 
           });*/ 
           //br.close(); 
          //} 


          //---client has disconnected from the server--- 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            textView1.setText(textView1.getText() 
              + "Client disconnected." + "\n"); 
           } 
          }); 

         } catch (Exception e) { 
          final String error = e.getLocalizedMessage(); 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            textView1.setText(textView1.getText() 
              + error); 
           } 
          });       
         } 
        } 
       } else { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          textView1.setText(textView1.getText() 
            + "No internet connection on device." 
            + "\n"); 
         } 
        }); 
       } 
      } catch (Exception e) { 
       final String error = e.getLocalizedMessage(); 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         textView1.setText(textView1.getText() + error + "\n"); 
        } 
       }); 
      } 

      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        textView1.setText(textView1.getText() + "\n" + "Server exited" 
          + "\n"); 
       } 
      }); 
     } 
    } 





    @Override 
    protected void onStart() { 
     super.onStart(); 
     //---get the IP address of itself--- 
     SERVER_IP = getLocalIpv4Address(); 

     //---start the server--- 
     Thread serverThread = new Thread(new ServerThread()); 
     serverThread.start(); 

    } 




    @Override 
    protected void onStop() { 
     super.onStop(); 
     try {   
      serverSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 

+0

s'il vous plaît ajouter le LogCat – Ekonion

+0

définir « est écrasé ' – njzk2

+0

-1 pour aucune pile incluse ni disponible étant donné le code. – njzk2

Répondre

0

comme vous "présenté" textview vous devrait faire la même chose avec le bouton puisque maintenant vous essayez de le trouver par ID, mais avant de configurer une mise en page. alors faites ceci:

TextView textView1; 
Button button1; 

et plus tard après

setContentView(R.layout.activity_main); 
    //---make the TextView scrollable--- 
    textView1 = (TextView) findViewById(R.id.textView1); 

faire

b1 = (Button) findViewById(R.id.button1); 

Aussi est vraiment difficile d'aider sans au moins logcat

+0

Y at-il un problème dans l'écriture du bouton onclick dans la boucle while try? il montre un crash – wizard

+0

normalement, ce n'est pas un problème si vous le faites correctement. Quel est le crash, que dit le logcat? –

+0

thread sortant avec une exception non saisie – wizard

Questions connexes