Я пытаюсь получить местоположение с помощью служб определения местоположения Google для Android.
Я пытался поиграть с некоторыми методами из API Google из пакета задач, но все, похоже, не удается.Точнее, мое приложение начинает зависать.
public class LocationTask extends AsyncTask<FusedLocationProviderClient, Void, JSONObject> {
@SuppressLint("MissingPermission")
@Override
protected JSONObject doInBackground(FusedLocationProviderClient... locationProviderClients) {
WeatherApiCall weatherApiCall = new WeatherApiCall();
Task<Location> locationTask = locationProviderClients[0].getLastLocation();
Location location = null ;
try {
location = Tasks.await(locationTask);
weatherApiCall.execute("weather", String.format(Locale.getDefault(), "%.2f", location.getLatitude()),
String.format(Locale.getDefault(), "%.2f", location.getLongitude()), "metric");
return new JSONObject(weatherApiCall.get());
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
Я также пытался использовать addOnSuccessListener, но безрезультатно.
try {
locationProviderClients[0].getLastLocation()
.addOnSuccessListener(location -> {
if (location != null) {
Log.d("LOCATION", location.toString());
weatherApiCall.execute("weather", String.format(Locale.getDefault(), "%.2f", location.getLatitude()),
String.format(Locale.getDefault(), "%.2f", location.getLongitude()), "metric");
}
});
return new JSONObject(weatherApiCall.get());
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
Я знаю, что прослушиватель успеха выполняетдействие после того, как задача locationProviderClients [0] .getLastLocation () успешно завершена, но мне не удалось получить результат от задачи.