我有一个FragmentActivity我试图加载谷歌地图。它实现了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对象为null,并且当调用任何与googleMap相关的方法(例如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"/>
答案 0 :(得分:2)
提示为getMapAsync
(asynchronous)。
onMapReady
不会立即调用,这意味着在调用该方法之前不会设置googleMap
。
编辑:确保在设置映射值之前没有对googleMap
进行方法调用,即在运行方法之前添加一个检查是否为null。同时将@Nullable
注释添加到private GoogleMap googleMap;
它将有助于开发,因为Android工作室会在您错过空检查时提醒您。
答案 1 :(得分:0)
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();
}
答案 2 :(得分:0)
好。我得到了解决方案。我将与googleMap相关的方法(即setOnCameraChangeListener)移动到onMapReady,之前在onCreate中调用了onMapReady。 onCreate中的googleMap对象为null,导致应用程序崩溃。
答案 3 :(得分:-1)
@qwertz,您必须在oncreate中设置地图。完成getMapAsync后,然后mapreadycallback将调用onMapReady
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
这对我有用