onMapReady未被调用:FrgmentActivity中的Google Map:Android Studio

问题描述 投票:0回答:4

我有一个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"/>
android google-maps android-studio nullpointerexception supportmapfragment
4个回答
2
投票

提示是getMapAsync (asynchronous)

onMapReady不是直接调用的,这意味着在调用该方法之前不会设置googleMap

编辑:确保在设置映射值之前没有对googleMap进行方法调用,即在运行方法之前添加一个检查它是否为null。另外将@Nullable注释添加到private GoogleMap googleMap;它将有助于开发,因为如果您缺少空检查,Android工作室将提醒您。


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

0
投票

好。我得到了解决方案。我将与googleMap相关的方法(即setOnCameraChangeListener)移动到onMapReady,之前在onCreate中调用了onMapReady。 onCreate中的googleMap对象为null,导致应用程序崩溃。


-1
投票

@qwertz你必须在你的oncreate中设置地图。当getMapAsync完成后,mapreadycallback将调用onMapReady

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.