我在片段中使用谷歌地图并在调用getMap()时获取null,这是我的代码:
在我的MapViewFragment
中 private GoogleMap mGoogleMap;
我在onCreate()方法中的这一行得到null ...
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 :(得分: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 :(得分: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" />
在Manifest文件中关闭应用程序TAG之前添加此
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="YOUR API KEY" />
在Gradle中添加
compile 'com.google.android.gms:play-services:8.1.0'
答案 2 :(得分: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.
}
}
答案 3 :(得分: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();