Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NullPointerException试图调用method.GoogleMap.setMapType(int)和#x27;关于空对象引用_Java_Android_Google Maps_Android Fragments_Nullpointerexception - Fatal编程技术网

Java NullPointerException试图调用method.GoogleMap.setMapType(int)和#x27;关于空对象引用

Java NullPointerException试图调用method.GoogleMap.setMapType(int)和#x27;关于空对象引用,java,android,google-maps,android-fragments,nullpointerexception,Java,Android,Google Maps,Android Fragments,Nullpointerexception,我有一个谷歌地图的片段,在我的应用程序中绘制多边形。和actionbar上的菜单,我可以从中更改地图视图类型。谷歌地图上还有一个FAB片段,可以将地图类型更改为卫星视图。但当我点击FAB时,我的应用程序崩溃并抛出 NullPointerException:尝试调用虚拟方法 空对象引用上的“void com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment.setFilter(com.google.andr

我有一个谷歌地图的片段,在我的应用程序中绘制多边形。和actionbar上的菜单,我可以从中更改地图视图类型。谷歌地图上还有一个FAB片段,可以将地图类型更改为卫星视图。但当我点击FAB时,我的应用程序崩溃并抛出

NullPointerException:尝试调用虚拟方法 空对象引用上的“void com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment.setFilter(com.google.android.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);
        }
    });
这是在menuItem中工作的代码:

  @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实例
mMap
已初始化,然后才能对其调用
setMapType
。首先尝试进行快速检查:

if (mMap != null) {
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
最重要的是,再次检查您是否按照Google的方法使用和正确初始化了地图

希望这有帮助

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