Клиент поставщика слияния местоположений всегда возвращает первое местоположение как нулевое - PullRequest
0 голосов
/ 31 марта 2020

У меня есть действие с кнопкой, и при нажатии этой кнопки должно отображаться местоположение. Но первый щелчок всегда возвращает ноль, второй щелчок возвращает правильную информацию. Я попытался использовать задержку, но это только задерживает создание диалогового окна предупреждения, но первое значение при первом нажатии кнопки равно нулю.

public class MainActivity extends AppCompatActivity {
    private FusedLocationProviderClient fusedLocationClient;
    private Double longitude, latitude;
    private Float accuracy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        Button testButton = findViewById(R.id.test_button);
        testButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getCurrentLocation();
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Current Location")
                        .setMessage("Location: " + latitude +", "+ longitude +
                                "\nAccuracy: " + String.format(Locale.getDefault(),"%.2f", accuracy) +"m")
                        .setNegativeButton(android.R.string.cancel, null)
                        .show();
                }
            }
        });
    }

    private void getCurrentLocation() {
    fusedLocationClient.getLastLocation()
            .addOnSuccessListener(this, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // Get last known location, and check for null.
                        if(location!=null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                            accuracy = location.getAccuracy();
                        }
                    }
                });
    }

1 Ответ

0 голосов
/ 31 марта 2020

Попробуйте сделать переменную защищенной, сделайте так:

 protected FusedLocationProviderClient fusedLocationClient;
 protected Double longitude, latitude;
 protected Float accuracy;

Вместо этого:

private FusedLocationProviderClient fusedLocationClient;
private Double longitude, latitude;
private Float accuracy;
...