я продолжаю получать местоположение null при использовании текущего местоположения

# #java #android #firebase-realtime-database #location #geofire

Вопрос:

Я пытаюсь использовать Geoquery, чтобы найти других ближайших пользователей в моем радиусе. В моем приложении у меня есть кнопка, которая при нажатии вызывает функцию с именем findClosestCars, которая использует geoQuery для ближайших пользователей в моем радиусе. Для того, чтобы использовать Geoquery, мне нужно захватить свою широту и долготу. Для этого я сохраняю широту и долготу в переменных двойного типа с именами широта и долгота. Широта и долгота захватываются объектом местоположения с именем currentlocation,например, широта=currentLocation.getLatitude (), долгота=currentLocation.getLongitude(). Вместо использования fusedlocation я пытаюсь получить текущее местоположение для заполнения текущего местоположения объекта. Ниже приведен мой код для findClosestCars

 
    private void findClosestCars() {


        latitude=currentLocation.getLatitude();
       longitude=currentLocation.getLongitude();
        databaseReference = FirebaseDatabase.getInstance().getReference("Lenders");
        GeoFire geoFire = new GeoFire(databaseReference);
        GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), radius);
        geoQuery.removeAllListeners();

        geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
            @Override
            public void onKeyEntered(String key, GeoLocation location) {

                if (!driverFound) {
                    driverFound = true;
                    driverFoundID = key;

                    closestLender = FirebaseDatabase.getInstance().getReference("Users").child("Lenders").child(driverFoundID);
;



                 showPictureAndPrice();
                }

                radius  ;


            }

            @Override
            public void onKeyExited(String key) {

            }

            @Override
            public void onKeyMoved(String key, GeoLocation location) {

            }

            @Override
            public void onGeoQueryReady() {

                if (!driverFound) {
                    radius  ;
                }


            }

            @Override
            public void onGeoQueryError(DatabaseError error) {

            }
        });
    }

 

Ниже приведен код, чтобы захватить текущее местоположение и поместить его в переменную currentLocation

 
 @Override
    public void onLocationChanged(@NonNull Location location) {



        currentLocation=location;

    }
    protected synchronized void builGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mGoogleApiClient.connect();

    }
    @Override
    public void onConnected(@Nullable Bundle bundle) {

        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(1000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this);
    }


 

Комментарии:

1. Как этот вопрос связан с Firebase?

Ответ №1:

Вы проверяете разрешения, но не запрашиваете их, если у вас их еще нет. Тебе нужно это сделать.