Android Logcat错误:尝试调用虚拟方法' double android.location.Location.getLatitude()'在null对象引用上

时间:2017-02-26 22:47:44

标签: android google-maps nullpointerexception location

美好的一天!

我目前遇到的困境是我的代码在我的某个Android设备上工作但强制关闭另一个。

基于我的logcat,这是错误:

02-27 06:37:29.134 23579-23579/com.example.maui.dabtrain E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
                                                                              at com.example.maui.dabtrain.MainActivity.onMapReady(MainActivity.java:504)
                                                                              at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
                                                                              at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source)
                                                                              at android.os.Binder.transact(Binder.java:507)
                                                                              at com.google.android.gms.maps.internal.bw.a(:com.google.android.gms.DynamiteModulesB:82)
                                                                              at com.google.maps.api.android.lib6.impl.bf.run(:com.google.android.gms.DynamiteModulesB:1805)
                                                                              at android.os.Handler.handleCallback(Handler.java:751)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:154)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6688)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

以下是我所在位置的代码:

        gMap = googleMap;

        if(!gMap.isMyLocationEnabled())
            gMap.setMyLocationEnabled(true);

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);


        if (myLocation == null) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);
            String provider = lm.getBestProvider(criteria, true);
            myLocation = lm.getLastKnownLocation(provider);
        }


    LatLng userLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
    gMap.animateCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 13), 1500, null);

其余代码适用于Google Markers,Polyline,Radius等。

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

这是因为getLastKnownLocation返回null,如果你看一下方法

https://developer.android.com/reference/android/location/LocationManager.html#getLastKnownLocation(java.lang.String)

  

这可以在不启动提供程序的情况下完成。请注意,此位置可能已过期,例如,如果设备已关闭并移至其他位置。   如果当前禁用了提供程序,则会返回 null

话虽如此,您在使用getLastKnownLocation

时应始终检查是否为空