我正在尝试在一个小型 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()
我无法理解为什么会抛出空指针异常。
最佳答案
我认为,问题可能是因为位置为空。在使用它之前验证它不为空。 (如此处的 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
}
}
}
关于android - 无法找到位置应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959689/