我正在尝试使用GoogleApiClient查找设备的最后一个已知位置,因此我使用了精细级别的访问权限,但由于出现的位置为空,因此出现以下异常。

    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.kuldeep.location2, PID: 1421
            java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
                at com.example.kuldeep.location2.MainActivity.onConnected(MainActivity.java:51)

                private GoogleApiClient mGoogleApiClient;

                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);

                    mGoogleApiClient = new GoogleApiClient.Builder(this)
                        .addConnectionCallbacks(this)
                        .addOnConnectionFailedListener(this)
                        .addApi(LocationServices.API)
                        .build();
                }

                @Override
                protected void onStart() {
                    mGoogleApiClient.connect();
                    super.onStart();
                }

                @Override
                protected void onStop() {
                    mGoogleApiClient.disconnect();
                    super.onStop();
                }

                @Override
                public void onConnected(Bundle bundle) {

                    try {
                        Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                            mGoogleApiClient);
                        Toast.makeText(this, mLastLocation.getLatitude() + ", " + mLastLocation.getLongitude(), Toast.LENGTH_SHORT);
                    } catch (SecurityException e){
                        e.printStackTrace();
                    }
                }


我的清单文件如下:

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.kuldeep.location2">

            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        </manifest>

最佳答案

首先,getLastLocation()可以为null,因此您需要小心地直接访问mLastLocation,而无需进行“空”检查。第二,我建议您添加清单:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


然后调用一个LocationRequest。

if(locRequest== null)
{
    locRequest= new LocationRequest();
    locRequest.setInterval( interval );
    locRequest.setFastestInterval( fastestInterval );
    locRequest.setPriority( priority );

    LocationServices.FusedLocationApi.requestLocationUpdates(yourGoogleApiClient, locRequest, this);
}

关于java - android location apis:FusedLocationApi.getLastLocation为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34703559/

10-13 05:02