У меня есть 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();
Чтобы избежать путаницы, просто создайте 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();
Спасибо за ответ. Еще не пробовал, обновлю