我试图在点击按钮时获取用户的位置。
我的按钮onclick监听器中有以下代码:
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
bestProvider = locationManager.getBestProvider(criteria, false);
Location currentLocation = locationManager.getLastKnownLocation(bestProvider);
Log.e(tag,"reached till here");
location = Double.toString(currentLocation.getLatitude()) + " " + Double.toString(currentLocation.getLongitude());
Toast.makeText(getApplicationContext(), location, Toast.LENGTH_LONG);
MyLocation.setText(location);
我在logcat中获取输出 reached till here
。之后应用程序停止并要求我强行关闭它。我最初做了一些搜索,发现getLatitude和getLongitude返回double值。所以我纠正了代码。但我仍然得到一个错误。我做错了什么?
编辑: logcat错误:
得到RemoteException向pid 796 uid 10036发送setActive(false)通知
我认为currentLocation返回null
答案 0 :(得分:3)
如果您正在Emulator
中测试您的应用,那么您可能没有任何提供商且currentLocation
对象为空,这就是为什么getLatitude()
和getLongitude()
会给NPE。
编辑:正如@grinnner所说,从DDMS的角度来看,你可以模拟位置坐标的发送。在eclipse中打开DDMS Perspective,在LocationControls选项卡中设置经度和纬度,然后单击发送。确保“设备”选项卡中的焦点位于您运行应用程序的模拟器上。
答案 1 :(得分:1)
如果您没有最后一个已知位置(只需对返回的值执行简单的空检查),则需要添加位置侦听器以获取位置。像这样:
// Start listening for a new location.
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String bestProvider = lm.getBestProvider(new Criteria(), true);
mMyLocationListener = new MyLocationListener();
lm.requestLocationUpdates(bestProvider, 0, 0, mMyLocationListener);
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// Do what you need to do with the longitude and latitude here.
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
您还应该记得在不再需要时立即删除位置监听器:
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.removeUpdates(mMyLocationListener);
mMyLocationListener = null;