3

我在这一行得到一个空指针异常:

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 变量时,如何获得空指针异常?我的代码有什么问题?

4

4 回答 4

1

如果手机上没有任何东西实际上正在收听位置更新,那么手机将不会更新最后一个已知位置。在这种情况下,如果值过时,它将返回 null(否则它可能会返回一些非常陈旧的数据)。如果您想确保获得一个位置,您需要自己注册更新。然后,在第一次更新发生后,您可以随时调用 getLastKnownLocation。

于 2013-05-28T19:21:39.167 回答
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

于 2013-05-28T19:00:49.033 回答
0

这条线并不意味着你肯定会得到 not-nullLocation

Location location = locationManager.getLastKnownLocation(provider);

你得到null只是因为没有“最后已知”的位置。

于 2013-05-28T19:07:07.113 回答
0

返回的位置locationManager.getLastKnownLocation(provider)必须为空。检查您的应用是否在清单中具有访问位置所需的所有权限。另外,而不是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 的问题在于它可能是陈旧的或空的,所以不幸的是,如果您希望您的应用程序可靠,这可能是必要的。

于 2013-05-28T19:08:38.977 回答