Как я могу получить этот код для автоматического выполнения в onMapReady - PullRequest
0 голосов
/ 22 октября 2019

Я хочу сравнить широту и долготу из проанализированного JSON GET. Чтобы сравнить lat / lng из GET, мне нужно иметь текущее местоположение устройства lat / lng до того, как произойдет GET.

У меня есть метод, который использует onMyLocationButtonClick, и он прекрасно работает. Однако мне нужно, чтобы этот метод выполнялся в onMapReady, чтобы я мог сравнивать текущие значения широты / долготы устройств с тем, что анализируется из ответа JSON GET.

Это работает чудесно при нажатии даже на стертом эмуляторе, однако проблема заключается в получении и назначении устройствам текущих значений lat / lng ДО вызова API. Используя метод onClick, эти значения получаются только для onClick, и это происходит после выполнения вызова API и анализа JSON.

Я попытался просто позвонить onMyLocationClick(Location location), но получаю ошибку "не могуразрешить символ местоположения ". Я думаю, что я должен назначить locationListener для location, но я не совсем уверен, как это сделать. Через некоторое время все чтение и исследования превращаются в суп, так что теперь я выхожу и прошу помощи. :)

Конечным результатом будет onMapReady:

  1. Разрешения местоположения проверяются и запрашиваются, если необходимо.
  2. При подтверждении разрешений, увеличивайте текущее местоположение устройства наотобразить и присвоить текущие значения lat / lng переменным lat / lng.
  3. Передать значения переменных lat / lng с помощью вызова API для сравнения текущих значений lat / lng со значениями lat / lng, полученными из API.
    • Я полагаю, что это можно сделать с помощью getRetrofit (lat, lng) так же, как и с моим вызовом setAddress.

Любая помощь очень ценится.

Метод onMapReady:

    public void onMapReady(GoogleMap map) {
        mMap = map;

        mMap.setOnMyLocationButtonClickListener(this);
        mMap.setOnMyLocationClickListener(this);
        enableMyLocation();  // checks for fine and coarse location permissions
        // onMyLocationClick(Location location);
        getRetrofit(); //call to API
    }

The method I want to execute onMapReady before the call to the API without having to click the location button:

@Override
    public void onMyLocationClick(Location location) {

        // get device current lat/lng
        this.lat = location.getLatitude();
        this.lng = location.getLongitude();

        setAddress(lat, lng); // method to reverse geocode to physical address
        // zoom to current location on map
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13));


        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(location.getLatitude(), location.getLongitude()))      // Sets the center of the map to location user
                .zoom(17)                   // Sets the zoom
                .bearing(90)                // Sets the orientation of the camera to east
                .tilt(40)                   // Sets the tilt of the camera to 30 degrees
                .build();                   // Creates a CameraPosition from the builder
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    }

1 Ответ

0 голосов
/ 22 октября 2019

в вашем onCreate() или там, где вам нужно его запустить, затем переместите логику из вашего onMyLocationClick в новую функцию и вызовите ее getMyLocation, прежде чем вызывать onMapReady, как в onCreate () и вашем onMyLocationClick



GoogleMap map = getMyLocation(location)
onMapReady(map)

public map getMyLocation(Location location){
   this.lat = location.getLatitude();
        this.lng = location.getLongitude();

        setAddress(lat, lng); // method to reverse geocode to physical address
        // zoom to current location on map
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13));


        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(location.getLatitude(), location.getLongitude()))      // Sets the center of the map to location user
                .zoom(17)                   // Sets the zoom
                .bearing(90)                // Sets the orientation of the camera to east
                .tilt(40)                   // Sets the tilt of the camera to 30 degrees
                .build();                   // Creates a CameraPosition from the builder
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}

...