Метод запуска потока и обработчик с DatagramSocket Android - PullRequest
0 голосов
/ 23 октября 2018

Я реализовал этот код для получения данных через пакеты udp, но я могу прочитать только первый пакет (метод Thread run () запускается один раз).Я реализую поток и обработчик.

protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

    textViewState = (TextView)findViewById(R.id.state);

    new Thread() {
        @Override
        public void run() {
            byte[] buffer = new byte[100];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            DatagramSocket datagramSocket = null;
            try {
                datagramSocket = new DatagramSocket(3333);
            } catch (SocketException e) {
                e.printStackTrace();
            }
            try {
                datagramSocket.receive(packet);
                mHandler.obtainMessage(2, 10, -1, buffer)
                        .sendToTarget(); // Send the obtained bytes to the UI activity
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();

    mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 2) {
                byte[] readRpmBuf = (byte[]) msg.obj;
                String val="";
                for (int i=0;i<100;i++){
                    val+=String.valueOf(readRpmBuf[i])+"-";
                }
                textViewState.setText(val);
            }
        }
    };
}
...