如何使我的项目与getMapAsync兼容?

时间:2016-08-01 13:38:16

标签: android google-maps

我在更新我的SDK 今天之前有了工作代码(以便将来参考问题日期)。 .getMap曾用过警告它已被弃用,但现在它甚至都没有被识别为有效输入。我假设这已经发生,因为API 24(Android Nougat)的新版本。这里没有进一步的代码:

private boolean initMap() {
        if (mMap == null) {
            MapFragment mapFrag =
                    (MapFragment) getFragmentManager().findFragmentById(R.id.map);
            mMap = mapFrag.getMapAsync();
        }
        return (mMap != null);
    }

如果有人可以帮我改变整合.getMapAsync(),我会非常感激。

谢谢!

更新:在查看答案中的建议之后,这是新的和更新的代码(这不在onCreate中) -

private boolean initMap() {
        if (mMap == null) {
            MapFragment mapFrag = (MapFragment) getFragmentManager()
                    .findFragmentById(R.id.map);
            mapFrag.getMapAsync(this);
        }
            return (mMap != null);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        if (googleMap != null) {
            mMap = googleMap;
        }
    }

2 个答案:

答案 0 :(得分:1)

你需要什么:

您的gradle文件中的

1。compile 'com.google.android.gms:play-services-maps:9.2.0'(最新的地图库),如果您无法使用它,则可能需要下载最新的工具。

2.加载地图片段的活动必须实现OnMapReadyCallback。 (这是最简单的方法,您可以创建一个实现OnMapReadyCallback)的其他类。

3.在活动onCreate方法中,您需要执行以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    /// additiona code here
    MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
    mapFrag.getMapAsync(this); //this is instance of your activity.
    //maybe code here
}

//callback method from OnMapReadyCallback
@Override
public void onMapReady(GoogleMap googleMap) {
    if (googleMap != null) {
        mMap = googleMap;
        //now the map is loaded, you can use it
    }
}

编辑代码后编辑

您的initMap错误,它无法返回boolean值,因为getMapAsync就像名称所示,异步,这意味着该方法将被执行并且它将立即返回,而不是等待完成,因此return (mMap != null);几乎总是会返回false。您应该使用onMapReady检查地图是否已加载。

答案 1 :(得分:1)

你需要像这样打电话

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

并使你的actifity(例如)实现OnMapReadyCallback。 然后覆盖onMapReady(GoogleMap googleMap)上的回调方法