Как мне синхронизировать задачу google-services? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь получить последнее местоположение с помощью API определения местоположения Google-сервисов, но безрезультатно. Я знаю только кое-что о потоке как в java, так и в android, поэтому не стесняйтесь давать мне советы по его улучшению.

 @Override
    protected void onStart() {
        super.onStart();
        Thread weatherDataThread = new Thread(this::getData);
        weatherDataThread.start();
        try {
            weatherDataThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        TextView temperatureTextView = findViewById(R.id.temperatureLabel);
        String currentText = temperatureTextView.getText().toString();
        Objects.requireNonNull(weatherData);
        try {
            String updatedText = currentText + " " + weatherData.getJSONObject("main").getDouble("temp") + "\u00B0C";
            temperatureTextView.setText(updatedText);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

@SuppressLint("MissingPermission")
    private void getData() {
        String[] permissions = new String[]{Manifest.permission.INTERNET, Manifest.permission.ACCESS_COARSE_LOCATION};
        if (!checkPermissions(permissions)) {
            ActivityCompat.requestPermissions(this, permissions, INTERNET_LOCATION_PERMISSIONS);
        }
        locationProviderClient.getLastLocation()
            .addOnSuccessListener(this, location -> {
                WeatherApiCall weatherApiCall = new WeatherApiCall();
                String weatherResult = weatherApiCall.getWeatherResult("weather", String.format(Locale.getDefault(), "%.2f", location.getLatitude()),
                                               String.format(Locale.getDefault(), "%.2f", location.getLongitude()), "metric");
                try {
                    weatherData = new JSONObject(weatherResult);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            });
    }
...