NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'
Posted
技术标签:
【中文标题】NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)\'【英文标题】: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;
【问题讨论】:
【参考方案1】:在调用setMapType
之前,您需要确保您的GoogleMap 实例mMap
已经初始化。首先尝试快速检查:
if (mMap != null)
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
最重要的是,按照 Google 的 guide,仔细检查您是否使用 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;
希望这会有所帮助!
【讨论】:
以上是关于NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'的主要内容,如果未能解决你的问题,请参考以下文章
NullPointerException 尝试在空对象引用上调用 method.GoogleMap.setMapType(int)'
数据库错误:“NullPointerException:尝试在空对象引用上调用虚拟方法 getApplicationInfo()...”[重复]
原因:java.lang.NullPointerException:尝试在空对象引用上调用接口方法
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ActionBar.setNavigationMode(int)”
NullPointerException:尝试在空对象引用上调用虚拟方法 AlertDialog.setTitle(java.lang.CharSequence) [重复]
NullPointerException:尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”