我在一个片段中有一个谷歌地图,用于在我的应用程序中绘制多边形。以及操作栏上的菜单,从中我可以更改我的地图视图类型。谷歌地图片段上的一个FAB将地图类型更改为卫星视图。但当我点击FAB时,我的应用程序崩溃并抛出
NullPointerException:尝试调用虚拟方法空对象引用上的"void com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment.setFilter(com.google.aAndroid.gms.location.places.AutocompleteFilter(">
这是我在onCreateView方法中的代码:
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
mapViewModel = ViewModelProviders.of(this).get(MapViewModel.class);
View root = inflater.inflate(R.layout.fragment_map, container, false);
setHasOptionsMenu(true);
FloatingActionButton fab = root.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
});
这是在菜单项中工作的代码:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.normal:
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
break;
case R.id.satellite:
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
break;
case R.id.Draw:
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
break;
default:
return false;
}
return true;
}
在调用GoogleMap实例setMapType
之前,您需要确保其mMap
已初始化。请先进行快速检查:
if (mMap != null) {
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
最重要的是,根据谷歌的指南,使用getMapAsync
和onMapReady
方法仔细检查您是否正确初始化了地图。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
}
希望这能有所帮助!