2016-06-09 66 views
-1

我使用谷歌地圖的片段和調用的GetMap()當越來越空,這是我的代碼:的GetMap()是空的SupportMapFragment在谷歌地圖中的android片段

在我MapViewFragment

private GoogleMap mGoogleMap; 

我得到空在這條線,在onCreate()方法...

 mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

在fragment_map_view文件

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

http://stackoverflow.com/questions/26597161/findfragmentbyid-for-supportmapfragment-returns-null-in-android-studio –

+1

[Android MapView getMap()返回null](http:// stackoverflow .com/questions/22471766/android-mapview-getmap-returns-null) –

回答

0

我得到了它的原因,我想我應該張貼未來的讀者......

其實我的GoogleMap被稱爲一個片段是這樣,在該行..

mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

代替

getFragmentManager(), getSupportFragmentManager() should be used in fragments. 

更正單

mGoogleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
+0

你應該接受上面給出的答案之一,因爲它包含解決方案,因爲你解決了:)。 –

+0

你是對的他們解決了,但是那個時候最短的解決方案在上面。 –

2

getMap方法已棄用。您應該使用getMapAsync

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // ... 

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

    @Override 
    public void onMapReady(final GoogleMap googleMap) { 
     mGoogleMap = googleMap; 

     // Do something with your map 
    } 
} 
1

您是否添加了權限和Google API密鑰?

這裏是清單文件的項目調用這個函數中的OnCreate()

private void CheckGoogleMap() 
    { 

     try { 
      if (googleMap == null) { 
       googleMap = ((MapFragment) getFragmentManager(). 
         findFragmentById(R.id.map)).getMap(); 
      } 
      googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
在XML文件

<fragment 
       android:id="@+id/map" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       class="com.google.android.gms.maps.MapFragment" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true"> 

我的代碼

<uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
     <uses-permission android:name="com.example.googlemaps.permission.MAPS_RECEIVE" /> 
     <uses-permission android:name="android.permission.INTERNET"/> 


    <permission   android:name="com.example.googlemaps.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

應用TAG關閉之前清單文件添加這個

<meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="YOUR API KEY" /> 

在搖籃中添加

compile 'com.google.android.gms:play-services:8.1.0' 
1

,你可以做到這一點使用getMapAsync,並且在onMapReady方法,你會得到地圖對象。

public class YourMapActivity extends FragmentActivity implements OnMapReadyCallback { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // ... 

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

@Override 
public void onMapReady(final GoogleMap googleMap) { 

    // you will get map object hare 
    mGoogleMap = googleMap; 

    // now perform operations on that. 
    } 
}