我应该如何在AsyncTask中实现UDP?



我正在通过UDP协议发送一些数据包,但是在UDP类的这一部分(如下(中,应用程序因NetworkOnMainThreadException错误而崩溃:

client_socket.send(send_packet);

通过搜索错误,我发现在这种情况下应该使用 AsyncTask(我不确定这一点,任何想法(。那么我如何实现此代码的 AsynkTask 以解决错误呢?我的 UDP 类如下:

public class CheckIP {
private String CheckState;
private String IP;
//UDP IP Seraching
private byte[] send_data = new byte[1024];
private byte[] receiveData = new byte[1024];
public CheckIP(final String BN, final Context context) throws IOException {
DatagramSocket client_socket = new DatagramSocket(2222);
InetAddress IPAddress = InetAddress.getByName("255.255.255.255");
String str = String.valueOf(BN.charAt(7) + BN.charAt(5) + BN.charAt(8) + BN.charAt(3));
send_data = str.getBytes();
DatagramPacket send_packet = new DatagramPacket(send_data, str.length(), IPAddress, 2222);
client_socket.send(send_packet);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
client_socket.receive(receivePacket);
CheckState = "true";
IP = receivePacket.getAddress().toString();
}
public String getIP() {
return IP;
}
public String getCheckState() {
return CheckState;
}
}

以及我家的相关代码.class:

additembtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
try {
Buildnumber = "123456789";
CheckIP checkIP = new CheckIP(Buildnumber,home.this);
if (checkIP.getCheckState().equals("true")){
//show Toast
}else{
//show Toast
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
});

创建另一个异步任务类

private class UDPTask extends AsyncTask<URL, Integer, CheckIP> 
{
protected CheckIPdoInBackground(URL... urls) {
Buildnumber = "123456789";
CheckIP checkIP = null;
try {
checkIP = new CheckIP(Buildnumber, home.this);
} catch (IOException e) {
e.printStackTrace();
}
return checkIP;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(CheckIP checkIP) {
if (checkIP.getCheckState().equals("true")){
//show Toast
}else{
//show Toast
}
}
}

然后使用以下代码在单击时调用它:

new UDPTask().execute();

最新更新