onMapReady 未被调用:Google FrgmentActivity 中的地图:Android Studio
onMapReady not being called: Google Map in FrgmentActivity: Android Studio
我有一个 FragmentActivity,我试图在其中加载 google 地图。它实现了 OnMapReadyCallBack,当我尝试膨胀地图时,我得到了 mapFragment 对象,但是应用程序在调用 getMapAsync 后崩溃了。下面是我的代码:
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
initializeMap();
}
private void initializeMap() {
if (googleMap == null) {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
if(mapFragment!=null){
mapFragment.getMapAsync(MapActivity.this);
}
// check if map is created successfully or not
if (null== googleMap) {
Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
googleMap.setMyLocationEnabled(true);
}
}
我尝试调试,我注意到我正在获取 mapFragment 对象,但它从未到达 onMapReady 方法,这使得我的 googleMap 对象为空,并且当任何与 google正在调用地图(例如 setOnCameraChangeListener)。我已经完成了 documentation page 但它似乎在我的项目中不起作用。
我的项目中是否缺少某些东西?我应该如何克服这个错误并阻止应用程序崩溃。
TIA
编辑 1:
下面是我在 xml 文件
中的地图片段
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
mapFragment.getMapAsync(MapActivity.this);
表示地图将异步加载,如果加载完成,将回调到 onMapReady()
。
以下代码可能无法运行,因为地图尚未完成加载。您应该在 onMapReady()
方法内设置地图,而不是在 initializeMap()
.
内
if (null == googleMap) { // googleMap will still be null here
Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
}
提示是getMapAsync
(asynchronous).
onMapReady
不会立即被调用,这意味着 googleMap
在方法被调用之前不会被设置。
编辑:确保在设置映射值之前没有对 googleMap
进行方法调用,即在 运行 方法之前添加检查它是否为空。还要将 @Nullable
注释添加到 private GoogleMap googleMap;
,这将有助于开发,因为 Android 工作室会在您缺少空检查时提醒您。
嗯。我得到了解决方案。我将与 googleMap 有关的方法(即 setOnCameraChangeListener)移至 onMapReady,该方法之前在 onCreate 中被调用。 onCreate 中的 googleMap 对象为空,导致应用程序崩溃。
@qwertz 你必须在你的 oncreate 中设置地图。当 getMapAsync 完成后,mapreadycallback 将调用 onMapReady
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
这对我有用
我有一个 FragmentActivity,我试图在其中加载 google 地图。它实现了 OnMapReadyCallBack,当我尝试膨胀地图时,我得到了 mapFragment 对象,但是应用程序在调用 getMapAsync 后崩溃了。下面是我的代码:
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
initializeMap();
}
private void initializeMap() {
if (googleMap == null) {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
if(mapFragment!=null){
mapFragment.getMapAsync(MapActivity.this);
}
// check if map is created successfully or not
if (null== googleMap) {
Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
googleMap.setMyLocationEnabled(true);
}
}
我尝试调试,我注意到我正在获取 mapFragment 对象,但它从未到达 onMapReady 方法,这使得我的 googleMap 对象为空,并且当任何与 google正在调用地图(例如 setOnCameraChangeListener)。我已经完成了 documentation page 但它似乎在我的项目中不起作用。
我的项目中是否缺少某些东西?我应该如何克服这个错误并阻止应用程序崩溃。
TIA
编辑 1:
下面是我在 xml 文件
中的地图片段<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
mapFragment.getMapAsync(MapActivity.this);
表示地图将异步加载,如果加载完成,将回调到 onMapReady()
。
以下代码可能无法运行,因为地图尚未完成加载。您应该在 onMapReady()
方法内设置地图,而不是在 initializeMap()
.
if (null == googleMap) { // googleMap will still be null here
Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
}
提示是getMapAsync
(asynchronous).
onMapReady
不会立即被调用,这意味着 googleMap
在方法被调用之前不会被设置。
编辑:确保在设置映射值之前没有对 googleMap
进行方法调用,即在 运行 方法之前添加检查它是否为空。还要将 @Nullable
注释添加到 private GoogleMap googleMap;
,这将有助于开发,因为 Android 工作室会在您缺少空检查时提醒您。
嗯。我得到了解决方案。我将与 googleMap 有关的方法(即 setOnCameraChangeListener)移至 onMapReady,该方法之前在 onCreate 中被调用。 onCreate 中的 googleMap 对象为空,导致应用程序崩溃。
@qwertz 你必须在你的 oncreate 中设置地图。当 getMapAsync 完成后,mapreadycallback 将调用 onMapReady
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
这对我有用