J'essaye d'exécuter une connexion UDP avec un équipement externe. Je veux qu'il envoie un message à l'équipement toutes les 3 secondes et lire la réponse. J'ai créé 3 classes: principal, expéditeur et recevoir. J'ouvre un Runnable à la fois pour l'expéditeur et le destinataire et je les laisse dormir pendant 3 secondes avant de continuer. Mon problème est, quand j'appuie sur le bouton sur l'écran, les messages sont envoyés et reçus, mais ils ne sont pas mis à jour sur mon écran parce que la ligne de mise à jour n'est pas dans une boucle. Comment puis-je le dire pour mettre à jour l'écran toutes les 3 secondes? le code pour lire le message et l'afficher, est le suivant:Mise à jour de l'interface utilisateur multi-thread Android
textViewState.setText (udpReceive.receivedMessage);
code
public class MainActivity extends AppCompatActivity {
public static TextView textViewState;
public static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewState = (TextView) findViewById(R.id.textView);
context = getApplicationContext();
}
public void buttonConnect(View v) {
(new Thread(new udpSender())).start();
(new Thread(new udpReceive())).start();
textViewState.setText(udpReceive.receivedMessage);
}
}
classe pour envoyer un message:
public class udpSender implements Runnable {
public void run() {
while (true) {
String messageStr = "Hello Android!";
int server_port = 8888;
DatagramSocket s = null;
try {
s = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
InetAddress local = null;
try {
local = InetAddress.getByName("192.168.43.159");
} catch (UnknownHostException e) {
e.printStackTrace();
}
int msg_length = messageStr.length();
byte[] message = messageStr.getBytes();
DatagramPacket p = new DatagramPacket(message, msg_length, local, server_port);
try {
s.send(p);
} catch (IOException e) {
e.printStackTrace();
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
classe pour recevoir un message de udp
public class udpReceive implements Runnable {
private static final int MAX_UDP_DATAGRAM_LEN = 100;
private static final int UDP_SERVER_PORT = 8888;
public static String receivedMessage;
public void run() {
while (true) {
String message;
byte[] lmessage = null;
lmessage = new byte[MAX_UDP_DATAGRAM_LEN];
DatagramPacket packet = null;
DatagramSocket socket = null;
try {
packet = new DatagramPacket(lmessage, lmessage.length);
socket = new DatagramSocket(UDP_SERVER_PORT);
socket.receive(packet);
message = new String(lmessage, 0, packet.getLength());
receivedMessage = message;
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
socket.close();
}
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
utiliser Handler à g o retour au fil principal et ensuite vous pouvez mettre à jour votre TextView – MohammedAlSafwan