0

下面的代码有什么问题。它在这一行(location.setLatitude(latitude);)上抛出空指针异常。我试图在应用程序启动后立即制作一个圆圈,这就是我从我的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);

我在这里做错了什么吗?

4

3 回答 3

1

我认为您要做的不是从中获取最后一个已知位置,LocationManager而是从您自己定义的位置(例如随机位置)开始onCreate()。为此,只需创建一个新的Location对象,如下所示:

this.location = new Location("TechGeeky Randomly Initialized");

在这些行之前执行此实例化以避免异常:

location.setLatitude(latitude);
location.setLongitude(longitude);
locationListener.onLocationChanged(location);
于 2012-10-18T17:40:26.537 回答
0

使用此代码初始化位置对象:-

如果您想使用移动网络获取位置 将此代码放入 onCreate

Location location=null;  
location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

如果您想使用 GPS 获取位置 将此代码放入 onCreate

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
于 2012-10-18T17:23:22.777 回答
0

您已经实例化了位置对象。您在哪里创建对象到位置。请使用以下命令创建对象到位置:

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

或者

将位置对象作为参数传递给方法并检查空条件。

于 2012-10-18T17:24:40.013 回答