代码:
private GoogleMap mMap;
MapFragment mMapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = this.getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.rl_map, mMapFragment);
fragmentTransaction.commit();
mMap = mMapFragment.getMap();
在相对布局中显示地图(R.id.rl_map)。但是我添加标记marder时:
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Hello world"));
会报空指针异常。
看起来你是想在 Google 地图上添加一个标记。
但是在这段代码中,你在 MapFragment 的实例化和添加操作之后立即获取了 GoogleMap 对象。但是,这个对象可能还没有准备好使用,所以在添加标记时就会抛出空指针异常。
为了解决这个问题,可以在地图准备好后再进行操作。你可以使用地图的 OnMapReadyCallback 接口来解决这个问题,如下所示:
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
// 地图准备好了,可以在这里进行操作
googleMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Hello world"));
}
});
在这个例子中,你使用了 getMapAsync() 方法来获取 GoogleMap 对象,并传入了一个 OnMapReadyCallback 回调。当地图准备好后,onMapReady() 方法就会被调用,你就可以在这个方法中进行操作了。