Не запускается дочерний поток в android studio

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2023

При запуске потока он не работает.
Просто не выводит залодженные строки
Подскажите, пожалуйста, что может быть, ошибок не выводит

public void RegAuth(View view){

        Button button = (Button)findViewById(R.id.button);
        EditText phone = (EditText) findViewById(R.id.loginPhone);

        if(button.getText().toString().equals(this.reg)){
            startActivity(new Intent("com.example.taxi_full.Registration"));
        } if(button.getText().toString().equals(this.auth)) {
            String url = URL_API+phone.getText().toString();
            new Thread(() -> {
               try {
                   GsonParser parser = new GsonParser();
                   JsonWriter.jsonFileWriter(HttpApi.getId(url));
                   Root_user_one root = parser.parse();
                   Log.d("---ParseLogin---", root.getPhone());
                   Log.d("---Http---", HttpApi.getId(url));
                   JsonWriter.jsonClear();
                   Log.d("---Http---",HttpApi.getId(url));
                   //startActivity(new Intent("com.example.taxi_full.SMS_Code"));

               } catch (IOException e) {
                   Log.d("---ThreadEx--", e.getMessage());
               }
            });

        }

    }

Ответы

▲ 1Принят

При вызове конструктора поток только лишь создаётся, но не начинает своё выполнение. Для того, чтобы созданный при помощи new поток был запущен, необходим вызвать для него метод start().

То есть, например, в такой записи на экран ничего не будет выведено, так как поток не запускается, а только создаётся:

new Thread(() -> System.out.println("Hello, word"));

А при такой записи он уже выполнится, так как не только создаётся, но и сразу же запускается:

new Thread(() -> System.out.println("Hello, word")).start();

Для наглядности это можно даже записать вот так:

Thread thread = new Thread(() -> System.out.println("Hello, word"));
thread.start();

Так что если переписать код в вашей программе следующим образом, то поток должен будет отработать:

new Thread(() -> {
    try {
        GsonParser parser = new GsonParser();
        JsonWriter.jsonFileWriter(HttpApi.getId(url));
        Root_user_one root = parser.parse();
        Log.d("---ParseLogin---", root.getPhone());
        Log.d("---Http---", HttpApi.getId(url));
        JsonWriter.jsonClear();
        Log.d("---Http---",HttpApi.getId(url));
        //startActivity(new Intent("com.example.taxi_full.SMS_Code"));

    } catch (IOException e) {
          Log.d("---ThreadEx--", e.getMessage());
      }
}).start();