コードを実行するたびに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である理由がわかりません...スリープ状態にする価値がありますか?それはプログラミングの正しい方法でしょうか?経度/緯度を取得しようとすると、なぜ機能しないのかわかりません。私は何か間違ったことをしていますか?