Как получить результат от звонка в сервисы гугл? - PullRequest
2 голосов
/ 05 мая 2019

Я пытаюсь получить местоположение с помощью служб определения местоположения 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 () успешно завершена, но мне не удалось получить результат от задачи.

...