我正在尝试在我的活动中实现地图,但是当从类别切换到活动时,地图不会加载:
地图活动类
public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {
GoogleMap googleMap;
private static final double TARGET_LATITUDE = 17.893366;
private static final double TARGET_LONGITUDE = 19.511868;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
createMapView();
}
private void createMapView() {
// MapsInitializer.initialize(context);
try {
if (null == googleMap) {
((MapFragment) getFragmentManager().findFragmentById(
R.id.mapView)).getMapAsync(this);
if (null == googleMap) {
Toast.makeText(getApplicationContext(),
"Error creating map", Toast.LENGTH_SHORT).show();
}
}
} catch (NullPointerException exception) {
Log.e("mapApp", exception.toString());
}
}
private void addMarker() {
double lat = TARGET_LATITUDE;
double lng = TARGET_LONGITUDE;
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(lat, lng))
.zoom(15)
.build();
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
googleMap.animateCamera(cameraUpdate);
if (null != googleMap) {
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title("Mark")
.draggable(false)
);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
addMarker();
}
}
在此之前,代码本身存在错误,
无法解析方法
getMap
在代码部分:
try {
if(null == googleMap){
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.mapView)).getMap();
但我决定将其替换getMap为getMapAsync,并实施OnMapReadyCallback. 也许这就是错误的原因。
激活码layout:
<?xml version="1.0" encoding="utf-8"?>
<fragment
android:id="@+id/mapView"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

您需要在 onMapReady 方法中调用 addMarker() 。onMapReady 是地图准备好使用时调用的方法。您需要在其中进行初始设置,并在其中绘制标记。另外,一定要在onCreate方法中调用getMapAsync(this)方法;
尝试用这样的标记标记您的地图:
代码
layout:在您的 createMapView 方法中,暂时保持这样:
那么,在方法中
onMapReady:实施之前:
这是一个可以帮助您的链接,希望对您有所帮助。