Android 在for循环中创建googlemaps标记
我想在for循环中声明GoogleMaps标记。这是我的密码:Android 在for循环中创建googlemaps标记,android,google-maps,google-maps-markers,Android,Google Maps,Google Maps Markers,我想在for循环中声明GoogleMaps标记。这是我的密码: public void latlong() throws JSONException { JSONArray jsonArrayData = jsonData.getJSONArray("rows"); for (int i = 0; i < jsonArrayData.length(); i++) { JSONObject c = jsonArrayData.getJSONObject
public void latlong() throws JSONException {
JSONArray jsonArrayData = jsonData.getJSONArray("rows");
for (int i = 0; i < jsonArrayData.length(); i++) {
JSONObject c = jsonArrayData.getJSONObject(i);
JSONObject tmpObject = c.getJSONObject("value");
String latString = tmpObject.getString("latitude");
String longString = tmpObject.getString("longitude");
double lat = Double.parseDouble(latString);
double lng = Double.parseDouble(longString);
System.out.println("lat: " + lat + " // long: " + lng);
MarkerOptions place = new MarkerOptions().position(new LatLng(lat ,lng)).title("Hello Maps");
googleMap.addMarker(place);
}
}
似乎当您尝试在地图上放置标记时,您的地图尚未加载/初始化 尝试在空对象引用上调用虚拟方法“com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)”
您的地图似乎尚未初始化。为了初始化映射,需要在onCreate()方法中调用yourFragment.getMapAsync(),然后会得到如下回调:
@Override
public void onMapReady(GoogleMap map) {
map.addMarker(new MarkerOptions()
.position(new LatLng(10, 10))
.title("Hello world"));
}
如果标记依赖于对json资源的异步调用,则可以在活动中设置如下标志:
布尔值isMapReady=false;
布尔值isDataLoaded=false
然后在onMapReady()和latlong()中,您可以检查标志并调用addMarkers()方法。见下例:
public void onMapReady(GoogleMap map) {
isMapReady = true;
if(isDataLoaded)
addMarkers(map, jsonData);
}
public void latLong() {
data = YOUR_DATA;
isDataLoaded = true;
if(isMapReady)
addMarkers(map, jsonData);
}
我正在一个片段上创建谷歌地图。所以我需要在onCreatView方法中调用yourFragment.getMapAsync()?您可以在活动中通过检索片段并调用mapFragment.getMapAsync()或从片段内部调用它。这里的示例很抱歉我的愚蠢,但当我想在Fragments onCreateView方法中调用“getMapAsync(this)”时,它告诉我无法解析此方法。我不确定是否理解。您是在片段内还是在活动内创建地图片段?我是在片段内创建地图,在xml文件中使用mapView而不是mapFragment。当我使用mMapView(mMapView=(MapView)rootView.findviewbyd(R.id.MapView))调用方法getmapsync()时,并且我不调用mMapView.getMap()时,映射不会出现。
public void onMapReady(GoogleMap map) {
isMapReady = true;
if(isDataLoaded)
addMarkers(map, jsonData);
}
public void latLong() {
data = YOUR_DATA;
isDataLoaded = true;
if(isMapReady)
addMarkers(map, jsonData);
}