2017-07-11 1 views
0

Je voudrais obtenir de l'aide dans la programmation Android.Comment puis-je écrire à l'écran dans Android ce que je reçois dans un paquet UDP?

J'ai un petit programme qui reçoit des paquets UDP, et j'essaye d'écrire les messages dans un TextView, mais cela ne fonctionne pas. Avez-vous une idée du problème avec ce code? Il n'y a pas de soulignement rouge dans Android Studio, mais quand il reçoit un paquet, il ne fait rien ou il plante.

public class MainActivity extends AppCompatActivity { 

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

    public void UDPReciever(){ 
     Thread thread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try{ 
        int port = 55777; 
        DatagramSocket serverSocket = new DatagramSocket(port); 
        byte[] receiveData = new byte[8]; 
        byte[] sendData = new byte[8]; 

        while(true) 
        { 
         DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
         serverSocket.receive(receivePacket); 
         String sentence = new String(receivePacket.getData()); 

         TextView textView = (TextView) findViewById(R.id.editText); 
         textView.setText(sentence); 
        } 
       } catch (Exception e) { 

       } 
      } 
     }); 

     thread.start(); 
    } 
} 
+0

* non plus ne fait rien ou il plante * ... eh bien, il est évident avec une telle erreur de gestion 'catch (Exception e) { }' – Selvin

Répondre

2

En effet, le code pour mettre à jour le TextView n'est pas exécuté sur thread d'interface utilisateur. Pour exécuter du code sur thread d'interface utilisateur, le plus simple est d'utiliser la méthode runOnUiThread() du Activity, par exemple:.

MainActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
     TextView textView = (TextView) findViewById(R.id.editText); 
     textView.setText(sentence); 
    } 
});