我在这一行得到了一个nullpointerexception:
double latitude = location.getLatitude();
以下是导致我出现问题的代码块:
//Get the current location
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
//Zooms into the current location when the activity is started
double latitude = location.getLatitude();
double longitude = location.getLongitude();
当我正在初始化我的Location变量和LocationManager变量时,如何获得nullpointerexception?我的代码出了什么问题?
答案 0 :(得分:1)
如果手机上没有任何内容实际上正在收听位置更新,那么手机将不会更新上一个已知位置。在这种情况下,如果该值太过时它将返回null(否则它可能返回一些非常陈旧的数据)。如果您想确保获得一个位置,您需要自己注册更新。然后,在第一次更新发生后,您可以随时调用getLastKnownLocation。
答案 1 :(得分:0)
除了AndroidManifest.xml文件中的权限外,您是否注册了位置监听器?
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS, 100, 1, locationListener);
然后有一个方法,在本例中为locationListener
,以完成您的任务
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
答案 2 :(得分:0)
这一行并不意味着你肯定会得到not-null Location
Location location = locationManager.getLastKnownLocation(provider);
您只是因为没有“最后知道”的位置而获得null
。
答案 3 :(得分:0)
locationManager.getLastKnownLocation(provider)
返回的位置必须为null。检查您的应用是否具有清单中用于访问位置的所有必需权限。另外,而不是getBestProvider(...)
我建议你尝试
Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
并查看它们中的一个或两个是否为空。你也可以看看
bool isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
bool isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
看看你是否能发现任何问题。
更全面的方法是通过创建实现`LocationListener'位置监听器服务的类来注册位置更新。 getLastKnownLocation的问题在于它可能是陈旧的或者是空的,所以不幸的是,如果你希望你的应用程序可靠,这可能是必要的。