【问题标题】:unable to find location application crashes找不到位置应用程序崩溃
【发布时间】:2015-09-03 18:33:30
【问题描述】:

我正在尝试在一个小型 Android 应用中检测用户位置。

该应用程序之前正在运行。

但是现在当我运行我的应用程序时它就崩溃了。

这是我的代码。

private void getUserLocation() {

    location_manager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if (location_manager != null) {
        provider = location_manager.getBestProvider(criteria, true);
        location = location_manager.getLastKnownLocation(provider);
        location_manager.requestLocationUpdates(provider,
                Map.MIN_TIME_BW_UPDATES,
                Map.MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
        lat = location.getLatitude();
        lang = location.getLongitude();
    }
}

堆栈跟踪

E/AndroidRuntime(10925): FATAL EXCEPTION: main
E/AndroidRuntime(10925): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project.kamani.nearby/com.project.kamani.nearby.Map}: java.lang.NullPointerException
E/AndroidRuntime(10925): Caused by: java.lang.NullPointerException
E/AndroidRuntime(10925):    at com.project.kamani.nearby.Map.getUserLocation(Map.java:185)
E/AndroidRuntime(10925):    at com.project.kamani.nearby.Map.onCreate(Map.java:75)

根据我的解释,这里说错误在我的代码中的第 75 行。

所以从第 75 行看,我只是调用了上面的函数getUserLocation()

我无法理解为什么会抛出空指针异常。

【问题讨论】:

标签: android location


【解决方案1】:

我认为,问题可能是由于位置为空。在使用它之前验证它不为空。 (这里是location.getLatitude())。


试试下面的代码。

private void getUserLocation() {

location_manager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (location_manager != null) {

   List<String > provider=location_manager .getAllProviders();
            Location location = null;
            for(int i=0;i<provider.size();i++){
                 location=location_manager .getLastKnownLocation(provider.get(i));
                 if(location!=null){
                          location_manager.requestLocationUpdates(provider.get(i),
                                                    Map.MIN_TIME_BW_UPDATES,
                                                    Map.MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                       break;
                      }
            }


if(location!=null){
    lat = location.getLatitude();
    lang = location.getLongitude();
}else{
  // here you can initialize manually if you wish
}
}
}

【讨论】:

  • 是的,如果位置仍然为空,我如何找到位置?我认为代码中没有错误?我说的对吗?
  • LocationManager 有 3 个提供程序用于获取当前位置。在这里,我将遍历所有这些以找出位置。如果位置为空,请检查您的 android 设备的设置。
  • 设备中的设置是什么?
  • 在设置里面,有一个Location部分。检查它是否启用。
  • 刚才我的朋友打电话给我说'对于所有提供商来说,他的位置都是空的'。它一直工作到今天下午。不知道为什么有时..
【解决方案2】:

getLastKnownLocation 如果没有所选提供者的数据,则返回 null。所以如果它没有最后知道的位置,lat 和 long 将永远为 null,因为位置是在 listener 中设置的,它是异步的,所以你需要在 onLocationChanged 中设置 lat 和 long。

您还应该移动到谷歌播放服务中的 LocationClient http://developer.android.com/training/location/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2016-06-06
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多