即使地图显示没有任何错误,onMapReady 也不会调用

Posted

技术标签:

【中文标题】即使地图显示没有任何错误,onMapReady 也不会调用【英文标题】:onMapReady not calling even though the map display without any error 【发布时间】:2015-02-16 07:44:57 【问题描述】:

我正在尝试在 android 应用程序中使用 Google 地图 API v2 显示一个简单的地图。我正在遵循Map API Documentation 的说明。但我认为onMapReady 出于某种原因没有打电话。我正在使用google-play-services_lib 版本6587000。我的手机有google-play-services_lib verion 6587038,我相信。

Google 地图正在使用初始控件。有人可以帮我纠正这个错误吗?

public class MapDisplay extends FragmentActivity
implements OnMapReadyCallback 

private GoogleMap mMap;
private Location mCurrentLocation;
private MarkerOptions mMarkerOptions ;
    private MapFragment mMapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.location_map);

    /** not needed
            mMapFragment = MapFragment.newInstance();
            FragmentTransaction fragmentTransaction =
                    getFragmentManag

er().beginTransaction();
            fragmentTransaction.add(R.id.map, mMapFragment);
            fragmentTransaction.commit();*/

    /**corrected code*/
            MapFragment mapFragment = (MapFragment) getFragmentManager()
                    .findFragmentById(R.id.map);
                mapFragment.getMapAsync(this);




@Override
public void onMapReady(GoogleMap map) 

    toast("Map ready");
    Log.d("--***** MAP  ","::Map ready");

    LatLng sydney = new LatLng(-33.867, 151.206);

    map.setMyLocationEnabled(true);
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

    map.addMarker(new MarkerOptions()
            .title("Sydney")
            .snippet("The most populous city in Australia.")
            .position(sydney));


    

 private void toast(String text)
        Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
        toast.show();
     

   

location_map.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.google.android.gms.maps.MapFragment"
    android:id="@+id/map"
    android:layout_
    android:layout_/>

【问题讨论】:

【参考方案1】:

AFAIK,onMapReady() 是由在您的 MapFragment 上调用 getMapAsync() 触发的,我看不出您在哪里调用它。

【讨论】:

@SAN: "getMapAsync() throw and error" -- 那么也许你应该考虑问一个 Stack Overflow 问题来帮助你解决你遇到的任何问题。 “所以我不得不使用”——所以? AFAIK,您仍然需要致电getMapAsync()。此外,现在您有 两个 MapFragment 实例。这是一个示例项目,演示了 getMapAsync() 与静态 MapFragment 的使用:github.com/commonsguy/cw-omnibus/tree/master/MapsV2/NooYawk 如果在 xml 中您的 【参考方案2】:

要调用OnMapReady(GoogleMap map),请将以下内容附加到您的onCreate(...) 方法中:

MapFragment mapFragment = (MapFragment) 
    getFragmentManager().findFragmentById(R.id.map);

然后,添加:

// This calls OnMapReady(..). (Asynchronously)
mapFragment.getMapAsync(MapDisplay.this); 

【讨论】:

注意他的论点中的 MapDisplay.this,以防你有多个像我这样的类。命名类更安全。【参考方案3】:

添加:

mMap = map

以上onMapReady

【讨论】:

以上是关于即使地图显示没有任何错误,onMapReady 也不会调用的主要内容,如果未能解决你的问题,请参考以下文章

FragmentContainerView 中未调用/显示 OnMapReady

Map Fragment(Kotlin)onMapReady无法正常工作

如何在 Android 中的 onMapReady() 之外添加 Google 地图标记?

即使我的作业运行没有错误,SSMS 中也没有出现任何数据

没有任何动作显示在 MS Access 中单击的按钮即使没有任何错误显示

谷歌地图在我从 Firebase 获取数据之前运行,因此它崩溃了