【问题标题】:Android Logcat Error: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference [duplicate]Android Logcat 错误:尝试在空对象引用上调用虚拟方法“double android.location.Location.getLatitude()”[重复]
【发布时间】:2017-07-17 10:37:57
【问题描述】:

美好的一天!

我目前正处于两难境地,我的代码在我的一台 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 标记、折线、半径等。

感谢您的宝贵时间!

【问题讨论】:

  • 试试看这个,mylocation return null http://stackoverflow.com/questions/20438627/getlastknownlocation-returns-null
  • @Rotwang - 请您指导我该怎么做?谢谢。
  • 与所有 NPE 一样,在尚未实例化时找到您正在引用的对象。在使用它之前先实例化它。

标签: android google-maps nullpointerexception location


【解决方案1】:

是因为getLastKnownLocation返回为null,看方法的话

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

这可以在不启动提供程序的情况下完成。请注意,此位置可能已过时,例如,如果设备已关闭并移动到另一个位置。 如果提供程序当前被禁用,则返回 null

话虽如此,您在使用getLastKnownLocation 时应始终检查null

【讨论】:

  • 对不起,我现在很迷茫。那么,我现在该怎么办?
  • 在 `LatLng userLocation = new LatLng(myLocation.getLatitude(), myLocation.getLongitude()) 之前添加 if(myLocation != null) `
  • 但如果我这样做,它会给我的 Location.distanceBetween 一个错误。这就是为什么我首先删除了 if(myLocation != null) 语句。哈哈!
  • 将所有使用myLocation的代码放在if语句下
  • 我也试过这个。我将其全部插入到 if (myLocation != null) 下,但没有出现所有 Google 标记、折线、半径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多