3

で働いていない。ここでMapboxは私がフラグメントでmapboxを表示しようとしていますが、私は次のエラーを取得していますフラグメント

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

は地図フラグメントのクラスです:

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(); 
} 
} 

アム私はここに何かを逃した?私はこのリンクに従いました:https://www.mapbox.com/help/first-steps-android-sdk/

+0

このリンクを参照してくださいhttp://stackoverflow.com/questions/32601219/trying-私はマップボックスを使用していますが、それでも同じ方法でしょうか?32601861#32601861 – Emil

+0

私はMapboxを使用していますか? @Boss –

+0

Nahh ..あなたの問題を発見しました – Emil

答えて

4

あなたは2つのマップビューインスタンスを持っています。 1つはoncreateメソッド内のローカル変数で、もう1つはグローバル変数です。

とグローバル変数がinitalizedされていないが、だから私は、あなたが問題を理解すると思います。この

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

にこのライン

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

を変更します。

-1

どこにでもあるかもしれない使用前のMapViewを確認してください時に初期化ヌルかではありません。

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

@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(); 
} 
} 

また、代わりに内部/ローカル新しい宣言のクラスレベル/グローバルのMapViewオブジェクト参照を使用します

これに置き換えます

mapView = (MapView) layout.findViewById(R.id.mapview); 
関連する問題