以下代码有什么问题。它在此行(location.setLatitude(latitude);
)上抛出Null Pointer Exception。我试图在应用程序启动后立即创建一个圆圈,这就是我从onCreate
方法传递位置对象的原因。
private Location location;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0,
0,
locationListener);
mapView = (MapView) findViewById(R.id.mapView);
listView = (ListView) findViewById(R.id.mylist);
mapView.setStreetView(true);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(15);
GeoPoint initialPoint = new GeoPoint( (int) (36.778261* 1E6), (int) (-119.417932 * 1E6));
double latitude = initialPoint .getLatitudeE6() / 1E6;
double longitude = initialPoint .getLongitudeE6() / 1E6;
location.setLatitude(latitude);
location.setLongitude(longitude);
locationListener.onLocationChanged(location);
}
以下是负责LocationUpdate的课程。
private class GPSLocationListener implements LocationListener {
MapOverlay mapOverlay;
public GPSLocationListener(MapView mapView) {
}
@Override
public void onLocationChanged(Location location) {
if (location != null) {
GeoPoint point = new GeoPoint(
(int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
mapController.animateTo(point);
mapController.setZoom(15);
if (mapOverlay == null) {
mapOverlay = new MapOverlay(this,android.R.drawable.star_on);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.add(mapOverlay);
}
mapOverlay.setPointToDraw(point);
mapView.invalidate();
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
任何建议都会有很大的帮助。
更新: -
进行更改后,我正在
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
以下是我进行更改的代码。
GeoPoint initialPoint = new GeoPoint( (int) (36.778261), (int) (-119.417932));
double latitude = initialPoint .getLatitudeE6() / 1E6;
double longitude = initialPoint .getLongitudeE6() / 1E6;
this.location = new Location("TechGeeky Randomly Initialized");
location.setLatitude(latitude);
location.setLongitude(longitude);
locationListener.onLocationChanged(location);
我在这里做错了吗?
答案 0 :(得分:1)
我认为您要执行此操作不是从LocationManager
获取最后一个已知位置,而是从onCreate()
中您自己定义的位置(例如随机位置)开始。要实现这一点,只需创建一个新的Location对象,如下所示:
this.location = new Location("TechGeeky Randomly Initialized");
在这些行之前执行此实例化以避免异常:
location.setLatitude(latitude);
location.setLongitude(longitude);
locationListener.onLocationChanged(location);
答案 1 :(得分:0)
使用此代码初始化Location对象: -
如果您想使用移动网络获取位置请将此代码放入onCreate
Location location=null;
location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
如果您想使用GPS获取位置将此代码放入onCreate
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
答案 2 :(得分:0)
您已实例化位置对象。你在哪里创建对象到位置。请使用以下方法创建对象到位置:
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
或
将location对象作为参数传递给方法并检查null条件。