【问题标题】:NullPointerException attempt to invoke method.GoogleMap.setMapType(int)' on a null object referenceNullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'
【发布时间】:2020-07-02 05:44:12
【问题描述】:

我在片段中有一个谷歌地图,可以在我的应用程序中绘制多边形。和操作栏上的菜单,我可以更改我的地图视图类型。还有一个谷歌地图片段上的 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;
}

【问题讨论】:

    标签: java android google-maps android-fragments nullpointerexception


    【解决方案1】:

    在调用setMapType 之前,您需要确保您的GoogleMap 实例mMap 已经初始化。首先尝试快速检查:

    if (mMap != null) {
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    }
    

    最重要的是,按照 Google 的 guide,仔细检查您是否使用 getMapAsynconMapReady 方法正确初始化了地图。

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 2016-08-05
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多