Q:

Ожидание перед выполнением execute()

У меня есть класс GPStracker для определения координат пользователя. Который возвращает Location из метода getLocation(). В этом коде с помощью этого метода я присваиваю значение даблам lat и lon, после чего передаю их в JSON запрос в task.execute(). Но как я понял, получение координат занимает время и в json'е предаются значения, равные нулю. Как мне отредактировать код, чтобы перед выполнением execute() он дожидался, пока lat и lon присвоится значение? Вот код:
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DownloadJSONTask task = new DownloadJSONTask();
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);
        GPStracker g = new GPStracker(getApplicationContext());
        Location l = g.getLocation();
        if (l != null){
            lat = l.getLatitude();
            lon = l.getLongitude();
        }
        task.execute("https://api.openweathermap.org/data/2.5/onecall?lat=" + lat + "&lon=" + lon + "&exclude=minutely,hourly&appid={my api key}&units=metric");
        textView = findViewById(R.id.textView);
    } ```

A:

Если DownloadJSONTask наследник от AsyncTask, то нужно вызвать метод AsyncTask.get () для возврата результата и подождать, пока выполнение doInBackground не будет завершено. Но это остановит основной поток UI.
task.execute("https://api.openweathermap.org/data/2.5/onecall?lat=" + lat + "&lon=" + lon + "&exclude=minutely,hourly&appid={my api key}&units=metric").get();

