Подключение к серверу перезапускает приложение

#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");