这似乎是一个常见的问题,但我真的不明白为什么它会发生,即使我读了很多类似的问题。
我在模拟器设备上玩基本位置类,我设置了所有内容 - 权限(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)
{
}
}
答案 0 :(得分:8)
getLastKnownLocation()
一般会返回null
,如果最近没有应用请求您所需提供商的位置修复。
在模拟器上,它似乎更进了一步:除非已经将一个位置传递到模拟器,否则您不会获得位置,因为您的应用已调用requestLocationUpdates()
。
使用getLastKnownLocation()
的一般模式,如果您希望得到实际Location
的合理赔率,则使用requestLocationUpdates()
和removeLocationUpdates()
来确保LocationManager
通过您选择的提供商积极寻找地点。当然,如果您愿意,也可以使用LocationListener
和onLocationChanged()
,而不是getLastKnownLocation()
。
答案 1 :(得分:0)
还有另一个选择,可以使用locationManager.addTestProvider()创建自己的提供程序。这样您就可以进行自己的测试。
答案 2 :(得分:0)
@CommonsWare的答案很明确。要在模拟器上获取非空值,请转到import mlflow.sklearn
model = mlflow.sklearn.load_model(..)
model.predict(...)
应用程序,然后获得一些位置