我正在使用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);
}
同时,考虑文档中的免责声明:
如果由于连接问题导致地图从未加载,或者由于用户不断与地图交互导致地图不断变化而从未完成加载,则此事件将不会触发。