Android 在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

我想在for循环中声明GoogleMaps标记。这是我的密码:

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);
}