Как мы можем создать обработчик в потоке пользовательского интерфейса для отправки данных в другой поток

У меня есть 3 потока в приложении для Android. 1) поток пользовательского интерфейса 2) Серверный поток 3) Клиентский поток

когда пользователь вводит строку и отправляет данные из пользовательского интерфейса, мне нужно передать эти данные в поток сервера, чтобы сервер отправлял их клиентам через сокет Bluetooth.

Чтобы отправить данные в серверный поток, я использую приведенный ниже код

 Toast.makeText(getApplicationContext(), "send data to server handler", Toast.LENGTH_SHORT).show();
        Handler serverHandler=new Handler(Looper.getMainLooper());
        Message msg=new Message();
        msg.obj=text.getText();
        serverHandler.sendMessage(msg);

Насколько я понимаю, мне нужно создать обработчик из петлителя, связанный с серверным потоком, и отправить сообщение. Может ли кто-нибудь посоветовать, правильный ли это способ создания объектов-обработчиков из цикла.

Это серверный поток, который у меня есть

Looper.prepare ();

                    serverHandler = new Handler() {
                        public void handleMessage(Message msg) {
                            // Act on the message
                            String data=(String)msg.obj;
                            try {
                                socket.getOutputStream().write(data.getBytes());
                            }
                            catch(Exception e){

                            }
                        }
                    };
                    Looper.loop(); 

Спасибо за ответ. Еще не пробовал, обновлю

dileepVikram 09.09.2018 16:41
0
1
39
1

Ответы 1

Чтобы избежать путаницы, просто создайте AsyncTask

  private class DataHandler extends AsyncTask<Void, Void, Void> {
        private String message = null;
        private Socket socket;

        public DataHandler(String message, Socket socket) {
            this.message = message;
            this.socket = socket;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                socket.getOutputStream().write(message.getBytes());
            } catch (Exception e) {

            }
            return null;
        }
    }

Вызов AsyncTask

new DataHandler(text.getText(),socket).execute();

Другие вопросы по теме