如何调用retrofit api调用在oncamerachchange (camerposition arg0)事件后的



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

每次改变相机我都要调用api。

问题是当用户每次在地图上滑动/缩放时,oncamerachchange (camerposition arg0)方法将被触发,我的api调用也。

因此多次API调用正在运行,因此我在map上的输出完全被破坏了。

@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.
}

朋友们,请帮我解决这个问题。

主要关注的是多次调用不应该存在,它必须采取最后一次滑动/缩放效果。

谢谢

您可以使用OnMapLoadedCallback。来自文档:

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

同时,考虑文档中的免责声明:

如果由于连接问题导致地图从未加载,或者由于用户不断与地图交互导致地图不断变化而从未完成加载,则此事件将不会触发。

相关内容

  • 没有找到相关文章

最新更新