我正在制作一个从Arduino接收消息的Android应用程序,我实现了一个打开一个Thread的UDP服务器,但我无法获得答案字符串“lastMessage”的值,因为有了这个值,我将制作一系列动作。
这是我的课程_UDP:
public class Servidor_UDP {
private boolean server_activado = true;
private String lastMessage = "";
DatagramSocket socket;
private byte[] resp;
private DatagramPacket pqtResp;
Servidor_UDP()
{
resp = new byte[1024];
try {
socket = new DatagramSocket(6000);
pqtResp = new DatagramPacket(resp, resp.length);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void start(){
Thread t = new Thread(new server());
t.start();
}
public class server implements Runnable {
server() { run(); }
public void run() {
String message = "";
try {
do
{
socket.receive(pqtResp);
//message = new String(resp).trim();
message = new String(pqtResp.getData(),0,pqtResp.getLength());
lastMessage = message;
} while(server_activado);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String getString()
{
return lastMessage;
}
public void setServer(boolean b)
{
server_activado = b;
}
}
这个课我是从我的MainActivity的onCreate实现的:
Servidor_UDP UDP_S;
UDP_S = new Servidor_UDP();
UDP_S.start();
我尝试获取主类的方法的结果并在TextView中显示它们以确保消息到达但它没有显示任何内容,只是空。
public void actualizarUI()
{
respuesta = UDP_S.getString();
txt.setText(respuesta);
}
我等待你的帮助,先谢谢。
答案 0 :(得分:0)
您的server()
构造函数不应该调用run()
。 Thread.start()
会这样做。目前Thread.start()
永远不会执行,更不用说完成了,因此任何调用start()
方法的代码都不会返回。
答案 1 :(得分:0)
好的,我认为你在创建新服务器时有问题...()...
你可以试试这个:
private server server;
public void start(){
server = new server();
Thread t = new Thread(server);
t.start();
}
public class server implements Runnable {
server() { /*NO run();*/ }
public void run() {
String message = "";
try {
do
{
socket.receive(pqtResp);
//message = new String(resp).trim();
message = new String(pqtResp.getData(),0,pqtResp.getLength());
lastMessage = message;
} while(server_activado);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getLastMessage() {
return lastMessage;
}
}
public String getString()
{
return server.getLastMessage();
}
你正在做新服务器();所以我要创建一个新对象,你应该像我一样将它保存在类变量中,然后在服务器类中创建一个get方法......
PD:Intenta no hacer codigo en castellano:)