Java 如何使DatagramSocket始终接收android的数据包
我知道如何接收数据包,但我希望我的应用程序始终检查收到的数据包Java 如何使DatagramSocket始终接收android的数据包,java,android,udp,Java,Android,Udp,我知道如何接收数据包,但我希望我的应用程序始终检查收到的数据包 public void controlListener(){ control.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub switch(r
public void controlListener(){
control.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(receiveData().charAt(0)){
case '1':{
Log.d("","1");
setVisibility(View.INVISIBLE);
control.setVisibility(View.VISIBLE);
break;
}
case '3':{
Log.d("","3");
setVisibility(View.VISIBLE);
control.setVisibility(View.INVISIBLE);
Thread thread = new Thread()
{
@Override
public void run() {
try {
Log.d("", "here");
runOnUiThread(new Runnable() {
public void run() {
switch(receiveData().charAt(0)){
case '1':{
Log.d("", "1");
setVisibility(View.INVISIBLE);
control.setVisibility(View.VISIBLE);
break;
}
case '3':{
Log.d("", "3");
setVisibility(View.VISIBLE);
control.setVisibility(View.INVISIBLE);
break;
}
case '4':{
Log.d("", "4");
setVisibility(View.INVISIBLE);
control.setVisibility(View.VISIBLE);
break;
}
default:{
Log.d("","not expecting this");
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
break;
}
case '4':{
Log.d("","4");
setVisibility(View.INVISIBLE);
control.setVisibility(View.VISIBLE);
break;
}
default:{
Log.d("","not expecting this");
}
}
}
});
}
一旦我得到3分,我想做的就是继续接受,直到我得到1分或4分。并允许用户使用按钮,而它是一个3。如果1或4使所有按钮不可见,直到a接收到3。因此,正如您所说,您必须使用工作线程来永久执行
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
在该线程中,您还需要一个处理程序,该处理程序应在UI线程上创建,并对您的活动进行WeakReference,以防止内存泄漏并能够更新UI。所以当你收到新的包裹时,你可以这样做
handler.post(new Runnable() {
public void run() {
// do something with received string and activity
}
}
我仍然有麻烦线程工作,但所有的按钮被禁用,我可以触摸直到线程完成,然后它基本上冻结,但不crashI会建议你发布你写的所有内容switch语句在哪里我希望线程开始并接收数据包,并检查我是否得到1或4,但允许按钮当线程运行时按下。如果代码中没有启动任何线程,最简单的启动方法是编写
新线程(Runnable run)。start()
。我这样做了,现在我知道线程正在运行并接收数据包,但它不允许我使用按钮,直到它完成,或者它冻结按钮,但应用程序不会崩溃。我也试过runOnuithread和handler post。