NullPointerException - location是null?

时间:2013-05-28 18:54:05

标签: java android android-location

我在这一行得到了一个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?我的代码出了什么问题?

4 个答案:

答案 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();
}

请参阅此处的热门答案:Getting null from 'getLastKnownLocation' on SDK

答案 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的问题在于它可能是陈旧的或者是空的,所以不幸的是,如果你希望你的应用程序可靠,这可能是必要的。