如何在地图上的onCameraChange(CameraPosition arg0)事件后按5秒的顺序调用改装api调用

时间:2016-09-23 12:14:11

标签: android performance google-maps retrofit2 android-maps-v2

我正在使用retrofit2 api调用谷歌地图。

每次换镜头我都要打电话给api。

问题是每次onCameraChange(CameraPosition arg0)方法都会触发用户在地图上滑动/缩放缩放,并且我的api也会调用。

因此多次api调用正在运行,因此我在地图上的输出完全毁了。

@Override
public void onCameraChange(CameraPosition arg0) {
    // TODO Auto-generated method stub
    camerachange();
}

public void camerachange() {
   Log.e("temp", "camera change");
   // jarray = new JSONArray();
   jarray = new ArrayList<String>();

   LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;

   jarray.add(String.valueOf(bounds.southwest.latitude));
   jarray.add(String.valueOf(bounds.southwest.longitude));
   jarray.add(String.valueOf(bounds.northeast.latitude));
   jarray.add(String.valueOf(bounds.northeast.longitude));

   getPropertyList(jarray, 1) // this function has my retrofit call.
}

伙计们请帮助我解决这个问题。

主要关注的是多次呼叫不应该在那里它必须采取最后一次滑动/捏缩放效果。

感谢

1 个答案:

答案 0 :(得分:0)

您可以使用OnMapLoadedCallback。来自the documentation

  

public abstract void onMapLoaded()

     

地图完成渲染后调用。这只会被调用一次。如果您想再次收到通知,则必须请求另一个回调。

因此,您需要为地图设置初始setOnMapLoadedCallback,例如onMapReady方法:

public void onMapReady(GoogleMap map) {
    map.setOnMapLoadedCallback(this);
}

然后每次使用该事件时重置一个新的setOnMapLoadedCallback

public void onMapLoaded() {
    //TODO: Do your stuff

    map.setOnMapLoadedCallback(this);
}

另外,请考虑the documentation中的免责声明:

  

如果由于连接问题导致地图永远不会加载,或者由于用户经常与地图进行交互而导致地图不断变化并且永远不会完成加载,则不会触发此事件。