谷歌地图没有加载Android - Java

时间:2015-09-01 05:41:09

标签: java android google-maps

以下是我的内容,但我的地图未加载且onMapLoaded未被调用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

     <com.google.android.gms.maps.MapView android:id="@+id/mapView"
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:layout_marginTop="30dp"/>

</RelativeLayout>

然后在课堂上我有

public class Activity extends Activity implements GoogleMap.OnMapLoadedCallback {

MapView mMap;
GoogleMap mGooleMap;

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

    mMap = (MapView) findViewById(R.id.mapView);
    mGooleMap = mMap.getMap();
}

@Override
public void onMapLoaded() {

    Log.i(TAG, "loaaded");
}
}

但onMapLoaded永远不会被称为为什么?

感谢您的帮助

修改

我的xml现在是

<fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment" />

我也有

public class Activity extends FragmentActivity {

2 个答案:

答案 0 :(得分:0)

Google文档中,他们举了一个例子 Google Map Example

您可以实施 OnMapReadyCallback 监听器,该监听器在 google地图的示例应用中提供,并覆盖 onMapReady 方法,如下所示: -

// [ time string is DateTime.Now.ToString("M/dd/yyyy h:mm:ss tt") ]
if ( DB.DoUpdate("UPDATE Loads SET Customer='?', FinishTime=?, Carrier='?', Reference='?', Tags='?', Status='Received' WHERE LoadID = ?",
         new string[] { Item["Customer"], Item["FinishTime"], Item["Carrier"], Item["Reference"], Item["TagIDs"], Item["LoadID"] }) ) { ... }

在您的布局中添加地图片段,如下所示: -

public class YourCalssName extends AppCompatActivity implements OnMapReadyCallback {

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

     init(); //initialise MapFragment 
    .....
}

private void init() {
    SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this); // Important to call this method for listener
}

@Override
    public void onMapReady(GoogleMap googleMap) {
        if (googleMap != null) {
            //Do whatever you want to do
        }
    }
}

答案 1 :(得分:0)

您是否提供了GoogleMap V2密钥? 除了密钥,Google Map还需要您在项目的AppManifest.xml中提及的权限。

  

ACCESS_NETWORK_STATE - 检查网络状态数据是否可以   是否已下载 INTERNET - 检查互联网连接状态   
WRITE_EXTERNAL_STORAGE - 以谷歌地图的形式写入外部存储空间   将地图数据存储在外部存储中    ACCESS_COARSE_LOCATION - 使用WiFi和移动设备确定用户的位置&gt;细胞数据    ACCESS_FINE_LOCATION - 使用GPS OpenGL确定用户的位置    ES V2 - Google Maps V2需要

如果满足上述所有要求,此代码段将为您提供帮助。     公共类MainActivity扩展了Activity {

    // Google Map
    private GoogleMap googleMap;

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

        try {
            // Loading map
            initilizeMap();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * function to load map. If map is not created it will create it for you
     * */
    private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();

            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }

}

P.S尝试if(mGoogleMap == null)检查以确保您拥有Google地图的实例。