3

Ich versuche, ein MapBox in einem Fragmente angezeigt werden, aber ich bin immer folgende Fehlermeldung:MapBox nicht in Fragmente arbeitet

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.mapbox.mapboxsdk.maps.MapView.onResume()' on a null object reference

Hier ist die Karte Fragment Klasse:

public class Map extends android.support.v4.app.Fragment { 
    private MapView mapView; 

public Map() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View layout = inflater.inflate(R.layout.fragment_map, container, false); 

    MapView mapView = (MapView) layout.findViewById(R.id.mapview); 
    mapView.onCreate(savedInstanceState); 
    mapView.getMapAsync(new OnMapReadyCallback() { 
     @Override 
     public void onMapReady(MapboxMap mapboxMap) { 

      // Set map style 
      mapboxMap.setStyleUrl(Style.MAPBOX_STREETS); 

      // Set the camera's starting position 
      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(new LatLng(41.885, -87.679)) // set the camera's center position 
        .zoom(12) // set the camera's zoom level 
        .tilt(20) // set the camera's tilt 
        .build(); 

      // Move the camera to that position 
      mapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     } 


    }); 
    return layout; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mapView.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mapView.onPause(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mapView.onSaveInstanceState(outState); 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
    mapView.onLowMemory(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mapView.onDestroy(); 
} 
} 

Am Ich vermisse etwas hier? Ich folgte diesem Link: https://www.mapbox.com/help/first-steps-android-sdk/

+0

Siehe diesen Link http://stackoverflow.com/questions/32601219/trying- eine Map-in-a-Fragment-Aktivität einfügen/32601861 # 32601861 – Emil

+0

Ich benutze Mapbox, wäre es immer noch der gleiche Weg? @Boss –

+0

Nahh .. Ich habe dein Problem gefunden – Emil

Antwort

4

Sie haben zwei Mapview-Instanzen. eine ist eine lokale Variable innerhalb der Methode oncreate und eine andere ist eine globale Variable.

und die globale Variable nicht initialisiert wird, also diese Zeile ändern

MapView mapView = (MapView) layout.findViewById(R.id.mapview); 

in diese

mapView = (MapView) layout.findViewById(R.id.mapview); 

Ich denke, Sie das Problem zu verstehen.

-1

Bitte überprüfen mapView vor dem Gebrauch überall sein könnte null ist oder nicht zum Zeitpunkt initialisieren:

@Override 
public void onResume() { 
    super.onResume(); 
    if(mapView){ 
     mapView.onResume(); 
    } 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    if(mapView){ 
    mapView.onPause(); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
if(mapView){ 
    mapView.onSaveInstanceState(outState); 
} 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
if(mapView){ 
    mapView.onLowMemory(); 
} 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
if(mapView){ 
    mapView.onDestroy(); 
} 
} 

verwenden Auch Klassenstufe/global mapView Objektverweis anstelle von lokaler/innerer neuer Erklärung:

MapView mapView = (MapView) layout.findViewById(R.id.mapview); 

Ersetzen Sie diese

mapView = (MapView) layout.findViewById(R.id.mapview);