2016-09-23 54 views
0

我正在谷歌地圖上使用retrofit2 API調用。如何在地圖上的onCameraChange(CameraPosition arg0)事件5秒後按順序調用翻新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. 
} 

請大家幫我解決這個問題。

主要關心的是多次呼叫不應該在那裏它必須採取最後刷卡/縮放效果。

感謝

回答

0

可以使用OnMapLoadedCallback。從the documentation

公共抽象無效onMapLoaded()

圖時已完成渲染調用。這隻會被調用一次。如果您想再次收到通知,您必須請求另一個回叫。

所以,你需要設置一個初始setOnMapLoadedCallback您的地圖例如在onMapReady方法:

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

,然後重置該事件被消耗新setOnMapLoadedCallback每次:

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

    map.setOnMapLoadedCallback(this); 
} 

另外,考慮到the documentation的免責聲明:

如果由於連接問題導致地圖永不加載,或者地圖不斷變化,並且由於用戶不斷地與地圖交互而永不完成加載,則此事件不會觸發。

+0

此解決方案不適用於我。 –

+0

我說每當用戶在地圖上滑動一個API調用將是火災和響應將標記列表將被繪製在地圖上。所以如果用戶不斷刷卡,最後的刷卡效果應該反映在api調用上。而最近發生的事情是每次api調用都在觸發並且響應不斷髮生變化 –

相關問題