这似乎是一个常见的问题,但我真的不明白为什么会发生这种情况,即使我读了吨类似的问题。
我正在模拟器设备上玩一个基本的位置类,我设置了所有内容-权限(FINE和COARSE),我在DDMS中设置了坐标,我还尝试使用telnet和〈geo fix...〉,但无论如何,它总是在getlastknownlocation行上崩溃并出现空指针异常,你知道这里出了什么问题吗?
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) {
}
}
4条答案
按热度按时间guykilcj1#
如果最近没有应用向您所需的提供商请求位置修复,
getLastKnownLocation()
通常会返回null
。在模拟器上,它似乎更进了一步:由于您的应用调用了
requestLocationUpdates()
,因此除非已将位置传递到模拟器,否则您不会获得位置。使用
getLastKnownLocation()
的一般模式是,如果你想获得一个真实的Location
,使用requestLocationUpdates()
和removeLocationUpdates()
来确保LocationManager
通过你选择的提供商主动寻找位置。当然,如果你选择的话,你也可以使用LocationListener
和onLocationChanged()
,而不是getLastKnownLocation()
。dphi5xsq2#
Android
getlastknownlocation
在模拟器上为空@CommonsWare的答案很明确。要在模拟器上获得非空值,请转到
Google Maps
应用程序,然后获得某个位置fykwrbwg3#
还有另一种选择,使用locationManager.addTestProvider()创建自己的提供程序;这样你就可以自己做测试了。
jhkqcmku4#
请求位置更新+获取最后位置
以下是基于Commonsware的答案的代码示例。我将在
onCreate()
方法中调用getLocationUpdates()
,以便应用在您调用getLastLocation()方法之前获得位置更新。对此有更多想法。
对于一些人来说,这种解决方案根本没有意义。但如果你的应用不需要不断更新位置,那么这可能是一个潜在的解决方案,立即获得位置。但总是有这个解决方案的优点和缺点。