Присваивание значения переменным перед выполнением AsyncTask

Есть DownloadJSONTask, который наследуется от AsyncTask и делает JSON запрос, в который должны включаться данные о местоположении. Но execute() выполняется раньше, чем getCurrentLocation() получает значения и запрос отправляется с нулевыми координатами. Как сделать так, чтобы execute() "дожидалась" выполнения getCurrentLocation()?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvCity = findViewById(R.id.textViewCity);
    tvDate = findViewById(R.id.textViewCurDate);
    tvTemp = findViewById(R.id.textViewTemp);
    tvMain = findViewById(R.id.textViewMain);
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
    getCurrentLocation();
    cal = Calendar.getInstance();
    language = Locale.getDefault().getLanguage();
    DownloadJSONTask task = new DownloadJSONTask();
    url = ("https://api.openweathermap.org/data/2.5/onecall?lat=" + lat + "&lon=" + lon + "&exclude=minutely,hourly&appid={API KEY}&units=metric&lang=" + language);
    try {
        task.execute(url).get();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@SuppressLint("MissingPermission")
private void getCurrentLocation() {
    Log.i("MyResult", "Getting location");
    LocationManager locationManager =(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    if  (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        fusedLocationClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
            @Override
            public void onComplete(@NonNull Task<Location> task) {
                Location location = task.getResult();
                if (location != null){
                    lat = location.getLatitude();
                    lon = location.getLongitude();
                    Log.i("MyResult", Double.toString(lat));
                    Log.i("MyResult", Double.toString(lon));
                } else{
                    Log.i("MyResult", "Location is null");
                }
            }
        });
    }
}

Логи:

2020-10-15 16:33:24.397 22517-22517/com.example.cleanzyrebuild I/MyResult: Getting location

2020-10-15 16:33:25.511 22517-22517/com.example.cleanzyrebuild I/MyResult: {"lat":0,"lon":0,"timezone":"Etc/GMT","timezone_offset":0,"current"...

2020-10-15 16:33:25.535 22517-22517/com.example.cleanzyrebuild : сообщения от onPostExecute

2020-10-15 16:33:26.211 22517-22517/com.example.cleanzyrebuild I/MyResult: 48.806861877441406

2020-10-15 16:33:26.212 22517-22517/com.example.cleanzyrebuild I/MyResult: 62.28661346435547


Ответы (1 шт):

Автор решения: Vladislav Dyshlyuk

Как предложил KoVadim, решил отправить запрос из onComplete. Напрямую сделать не получилось поэтому написал метод executeJSON и запустил его из onComplete.

public void executeJSON(){
        url = ("https://api.openweathermap.org/data/2.5/onecall?lat=" + lat + "&lon=" + lon + "&exclude=minutely,hourly&appid={API KEY}&units=metric&lang=" + language);
        task.execute(url);
    }
→ Ссылка