使用当前位置时,我不断获取位置空值

Posted

技术标签:

【中文标题】使用当前位置时,我不断获取位置空值【英文标题】:i keep getting location null when using current location 【发布时间】:2021-11-18 16:10:40 【问题描述】:

我正在尝试使用 Geoquery 在我的半径范围内查找其他最近的用户。在我的应用程序中,我有一个按钮,按下该按钮会调用一个名为 findClosestCars 的函数,该函数使用 geoQuery 到我半径内最近的用户。为了使用 Geoquery,我需要获取我的纬度和经度。为此,我将纬度和经度存储在名为纬度和经度的双类型变量中。纬度和经度被名为 currentlocation 的位置对象获取,例如 latitude=currentLocation.getLatitude(),longitude=currentLocation.getLongitude()。我没有使用融合位置,而是尝试获取当前位置来填充对象 currentLocation。下面是我的 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 && 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);
    


【问题讨论】:

这个问题与 Firebase 有什么关系? 【参考方案1】:

您正在检查权限,但如果您还没有权限,则不会请求它们。你需要这样做。

【讨论】:

以上是关于使用当前位置时,我不断获取位置空值的主要内容,如果未能解决你的问题,请参考以下文章

在获取当前纬度和经度时获取空对象引用 [重复]

Android获取当前位置的最佳方式[重复]

当应用程序处于后台/挂起状态时,CLLocation 不断更新

无法在位置更改时获取当前位置 android

即使设备没有移动,位置也会不断变化

使用 runOnUiThread 获取当前位置