#java #android
#java #Android
Вопрос:
Я настроил Java-сервер на своем компьютере и клиент на своем телефоне Android. Однако, когда я запускаю приложение и перехожу к действию, связанному с клиентом, оно перезапускает приложение обратно к первому действию. Это происходит, когда выполняется клиентский метод.
Клиентский код таков
public class ServerInterface extends Activity {
private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private String message = "test1";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server_interface);
sendCommand("test");
}
public void sendCommand(String command) {
try {
client = new Socket("192.168.100.50", 43596); //Connect to PC server
printwriter = new PrintWriter(client.getOutputStream(), true);
printwriter.write(command);
printwriter.flush();
printwriter.close();
client.close(); //closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Я не знаю, что здесь не так.
Спасибо.
Комментарии:
1. вы выполняете сетевой вызов в основном потоке, Android запрещает это
Ответ №1:
Вы должны запустить сеть в асинхронном потоке. Android не разрешает это в основном потоке (поместите внутри класса, в котором вы должны его использовать)
private class Connect extends AsyncTask<String, Integer, Boolean> {
protected Boolean doInBackground(String... urls) {
try {
client = new Socket("192.168.100.50", 43596); //Connect to PC server
printwriter = new PrintWriter(client.getOutputStream(), true);
printwriter.write(command);
printwriter.flush();
printwriter.close();
client.close(); //closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
Затем для создания сети:
new Connect().execute("nullable unless used for dynamic links");