Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在AsyncTask中实现UDP?_Java_Android_Exception_Android Asynctask - Fatal编程技术网

Java 如何在AsyncTask中实现UDP?

Java 如何在AsyncTask中实现UDP?,java,android,exception,android-asynctask,Java,Android,Exception,Android Asynctask,我正在通过UDP协议发送一些数据包,但应用程序在UDP类的这一部分由于NetworkOnMainThreadException错误而崩溃(如下所示): 通过搜索错误,我发现在这种情况下应该使用AsyncTask(我不确定这一点,任何想法)。那么,我如何对这段代码实现AsynkTask以解决错误呢?我的UDP类如下: public class CheckIP { private String CheckState; private String IP; //UDP IP

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

通过搜索错误,我发现在这种情况下应该使用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;
    }
}
以及my home.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
                    }
 }
 }

无法解析setProgressPercent。。。checkIP应更改为onPostExecute,checkIP checkIP=new checkIP(Buildnumber,home.this);我应该试一试,长参数应该检查。。。谢谢你的全面回答
 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();