2016-06-09 68 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. 
    } 
}