MapBoxを使用したGPS使用に関する問題が発生しています。私はそれをオンにした直後にGPSを利用するためにメソッドを使用しようと、私は(私はgetLatitudeこの時間を使用しようとした)このエラーを受け取るたび:MapBox getLatitudeまたはgetLongitudeを使用する場合のヌル参照
java.lang.NullPointerException: Attempt to invoke virtual method
'double com.mapbox.services.commons.models.Position.getLatitude()' on a null object reference
私はGPSがなかったと信じていますまだポジションを見つけることができます。なぜなら、GPSメソッドを使用する関数にアクセスする前にちょっと待っていれば、動作していて、ヌル参照が得られるからです。私はここでそのエラーに関連するものを見つけましたが、それはGoogle Mapsを使用しています。
私はこの問題を解決してGPSをオフにしても問題はありませんが、GPSが位置を見つけたらいつでも方法や方法を見つけることができないため、ユーザーに自分の位置を示す前に画面を読み込みます。ここで
は、私はエラーを取得していますコードです:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(final MapboxMap mapboxMap) {
map = mapboxMap;
//...
// Button that shows the user their location
floatingActionButton = (ImageButton) findViewById(R.id.location_toggle_fab);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Verifica se o usuario esta com o GPS ligado
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
if (map != null) {
toggleGps(!map.isMyLocationEnabled());
}
}else{
//function that warns the user that they don't have their GPS turned on
montaAlertaSemGps();
}
}
});
//InfoWindow Data
mapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() {
@Nullable
@Override
public View getInfoWindow(@NonNull Marker marker) {
//...
final Marker marcador = marker;
if (!marker.getTitle().equals("Origem")&&!marker.getTitle().equals("Destino")) {
botaoIr = (Button) v.findViewById(R.id.botaoIr);
botaoIr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//Checks if the user have their GPS turned on
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
origin = Position.fromCoordinates(locationServices.getLastLocation().getLongitude(),locationServices.getLastLocation().getLatitude());
LatLng ponto = marcador.getPosition();
destination = Position.fromCoordinates(ponto.getLongitude(), ponto.getLatitude());
//Error starts below
origem = new MarkerOptions()
.position(new LatLng(origin.getLatitude(), origin.getLongitude()))
.title("Origem")
.icon(iconeRota);
destino = new MarkerOptions()
.position(new LatLng(destination.getLatitude(), destination.getLongitude()))
.title("Destino")
.icon(iconeRota);
//...
}
} else {
//...
}
}
});
}
return v;
}
});
}
});
}
private void toggleGps(boolean enableGps) {
if (enableGps) {
// Checa se o usuario permitiu acesso a localizacao
if (!locationServices.areLocationPermissionsGranted()) {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION);
} else {
enableLocation(true);
}
} else {
enableLocation(false);
}
}
private void enableLocation(boolean enabled) {
if (enabled) {
Location lastLocation = locationServices.getLastLocation();
if (lastLocation != null) {
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lastLocation), 16));
origin = Position.fromCoordinates(locationServices.getLastLocation().getLongitude(),locationServices.getLastLocation().getLatitude());
}
locationServices.addLocationListener(new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 16));
locationServices.removeLocationListener(this);
}
}
});
floatingActionButton.setImageResource(R.drawable.ic_location_disabled_black_24dp);
} else {
floatingActionButton.setImageResource(R.drawable.ic_my_location_24dp);
}
map.setMyLocationEnabled(enabled);
}
私は私のためにそのようなことを行うことができライブラリ内の方法を見つけることができません。
EDIT:問題を発見しましたが、解決策を見つけることができませんでした。問題は「lastLocation」である「enableLocation」から変数である:
Location lastLocation = locationServices.getLastLocation();
if (lastLocation != null) {
//...
}
変数は、私はそれがまだポジションを持っていなかったという事実にGPSをオンにし、ことを正確にした後、NULLであります関数 'getLatitude'がNULLオブジェクトのメソッドを呼び出そうとしている理由です。上記の条件に「else」を使用してコードをデバッグしましたが、「else」条件内で使用する必要があるか、lastLocation属性より前に使用するかを正確にはわかりません。
例外が発生している呼び出しは、 'origin.getLatitude()'または 'destination.getLatitude()'です。どのように '起源'が作られたのですか?どちらかが 'null'なので、あなたのメソッド呼び出しが不平を言っているように見えます。 – zugaldia
@zugaldia Ops、私はここで掃除をしてみた後に 'origin'値を消しました。 'origin'はグローバル変数です(他の関数でも使用できます)。値は次のとおりです:origin = Position.fromCoordinates(locationServices.getLastLocation()。getLongitude()、locationServices.getLastLocation()。getLatitude()) ; '。私は投稿を編集し、それを挿入しました。ありがとう。 とにかく、致命的なエラーを受け取っているのはgetLongitudeです。 –