0

コードを実行するたびにNullPointerExceptionが発生します。コードでインターネットとGPSのアクセス許可(ACCESS_FINE_LOCATION、ACCESS_MOCK_LOCATION、およびACCESS_COARSE_LOCATION)を有効にしています。エミュレータと電話の両方で試しましたが、どちらも失敗します。それは利用できないGPSやインターネット、AFAIKの問題ではありません。

私のコードスニペット:-

@Override
public void onCreate (Bundle savedInstanceState) 
{
    try {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
        new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true);
    mapView.setStreetView(false);
    mapView.setSatellite(false);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            MINIMUM_TIME_BETWEEN_UPDATES, 
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            new MyLocationListener()
    );

    mc = mapView.getController();
    //        String coordinates[] = {"51.708945", "8.745928"};  //THIS WORKS IF ENABLED
    //        double lat = Double.parseDouble(coordinates[0]);
    //        double lng = Double.parseDouble(coordinates[1]);


    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double lat = location.getLatitude(); //NULLPOINTER EXCEPTION THROWN HERE
    double lng = location.getLongitude();

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lng * 1E6)); 

    mc.animateTo(p);
    mc.setZoom(17); 
    //---Add a location marker---
    MapOverlay mapOverlay = new MapOverlay();
    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);     

    mapView.invalidate();
    } catch (Exception e) {}
}

緯度または経度を取得しようとすると、NullPointerExceptionがスローされます。どうすれば回避できますか?locationManagerオブジェクトは、(getSystemServiceメソッドを使用して)作成時に例外をスローしたり、場所の更新を要求したときに例外を発生させたりすることはありません。オブジェクトを使用する前にnullかどうかを確認できますが、その時点でオブジェクトがnullである理由がわかりません...スリープ状態にする価値がありますか?それはプログラミングの正しい方法でしょうか?経度/緯度を取得しようとすると、なぜ機能しないのかわかりません。私は何か間違ったことをしていますか?

ここ、またはここまたはここで対処された問題は、私の問題を解決できませんでした。ありがとうございました。

4

1 に答える 1

1

最も可能性の高い問題は、LocationManagerに最後の既知の場所がないため、nullが返されることです。その場合、位置を取得するために位置の更新を待つ必要があります。

-=更新=-これを行うだけです:

public void onLocationChanged(Location location) {
    double lat = location.getLatitude();
    double lng = location.getLongitude();

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lng * 1E6)); 

    mc.animateTo(p);
    mc.setZoom(17);
}

これは内部クラスであるため、すべてのアクティビティメンバーにアクセスできます。

于 2012-05-16T20:42:16.733 に答える