Ожидание перед выполнением 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);
} ```
Ответы (1 шт):
Если 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();