【发布时间】:2014-02-05 16:35:47
【问题描述】:
这似乎是一个常见问题,但我真的无法理解为什么会发生这种情况,即使我阅读了大量类似的问题。
我在模拟器设备上使用基本位置类,我设置了所有内容 - 权限(FINE 和 COARSE),我已经在 DDMS 中设置了坐标我也尝试使用 telnet 然后,但不管它总是在 getlastknownlocation 行上出现 nullpointer 异常而崩溃,有什么想法吗?
public class MainActivity extends Activity implements LocationListener {
private static LocationManager ok;
private Location L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ok=(LocationManager)this.getSystemService(ok.GPS_PROVIDER);
L=ok.getLastKnownLocation(ok.GPS_PROVIDER);
}
@Override
public void onLocationChanged(Location Loc) {
try {
double latop=Loc.getLatitude();
double longe=Loc.getLongitude();
Log.i("OK", "and"+longe+""+latop);
} catch (NullPointerException e)
{
}
}
【问题讨论】:
-
这里有一些问题(例如,在尝试获取位置之前未检查哪些提供程序已启用或可用)可能会导致您的错误。不过,我建议您先阅读this documentation,了解如何获取用户位置。由于要使您当前的代码正常工作需要进行大量更改,因此重新开始可能会更有效率。
-
getlastknownlocation 如果没有最后一个已知位置,将返回 null,如果不调用更新,则需要检查是否有 lastknowlocation。我从不尝试使用模拟器进行定位,因为我真的觉得你需要做一些事情,让它在启用定位服务的情况下像普通手机一样工作。所以我的猜测是你总是得到空值,因为你正在使用模拟器。 GPS在室外也能很好地工作,在你家里面可能会失败并且不会为你提供位置。
-
模拟器如何给出位置值。为了测试,我们必须使用 ddms-emulatorcontrol 内部的模拟器的默认 latlong。你必须使用设备来获取位置值..
-
对不起,但我在设备上玩了很多位置,所以我知道一些东西,您提供的链接专门用于 Google Play 服务,GPS_PROVIDER 也启用了地理修复,我已经做了
-
您的
requestLocationUpdates()电话在哪里?如果您没有,那可以解释您的症状。