我正在完成一个教程,我的应用程序基本上正在工作,除了一个小细节。我有一个选项菜单,用于演示将地图显示为卫星视图,缩放到特定地点等内容。
本教程有两个菜单选项,如下所示,有效地需要按照显示的顺序使用,以便将地图缩放到我当前所在的位置。我想通过在第二个菜单项中添加相同的功能(显示当前的loaction)来使第一个项目冗余(getcurrentlocation),但这会导致应用程序崩溃。
有没有人有任何想法为什么以及如何克服它。 谢谢。
代码段如下
case R.id.menu_getcurrentlocation:
// ---get your current location and display a blue dot---
map.setMyLocationEnabled(true);
break;
case R.id.menu_showcurrentlocation:
// Adding the next line breaks the app.
// map.setMyLocationEnabled(true);
Location myLocation = map.getMyLocation();
LatLng myLatLng = new LatLng(myLocation.getLatitude(),myLocation.getLongitude());
CameraPosition myPosition = new CameraPosition.Builder().target(myLatLng).zoom(17).bearing(90).tilt(30).build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(myPosition));
break;
答案 0 :(得分:3)
最初,当您GoogleMap
首次加载需要一段时间后,Location
将为空。
因此,对于您的两个菜单选项,请检查此方式。
if(map!=null){
map.setMyLocationEnabled(true);
}
if(map!=null){
Location myLocation = map.getMyLocation();
if(myLocation !=null){
LatLng myLatLng = new LatLng(myLocation.getLatitude(),
myLocation.getLongitude());
CameraPosition myPosition = new CameraPosition.Builder()
.target(myLatLng).zoom(17).bearing(90).tilt(30).build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(myPosition));
}
}
答案 1 :(得分:1)
来自开发者文档,
GoogleMap只能在底层使用getMap()获取 加载了地图系统,并且片段中的基础视图存在。 该类自动初始化地图系统和视图; 但是,因为这样,你就无法保证准备就绪 取决于Google Play服务APK的可用性。如果一个 GoogleMap不可用,getMap()将返回null。
进一步指出,
如果之后Google Play服务和片段可用 经历了onCreateView(LayoutInflater,ViewGroup,Bundle), 再次调用此方法将初始化并返回GoogleMap。
由于没有迹象表明你从哪里获得了你的地图以及确切地调用了哪个方法所以我假设你的getmap()
返回null。这意味着地图还没准备好。要么因为片段尚未就绪,要么您在没有Google Play服务的设备上运行。
有关详细信息,请参阅getMap。