2012-02-10 51 views
0

我需要檢查新創建的OverlayItem的數據是否已經存在於已經顯示在地圖上的OverlayItem列表中。我做了一個代碼來檢查OverlayItem的數據是否已經存在,但是我遇到了一個錯誤。我如何從Overlay中提取OverlayItem?如何從Overlay中提取OverlayItem?

我當前的代碼是這樣的:

//where mapOverlays = mapView.getOverlays() and overlayItem is the newly created overlayItem 
public boolean isExisting(List<Overlays> mapOverlays, OverlayItem overlayItem) 
{ 
    ItemizedOverlay overlay; 
    OverlayItem itemToCompare; 

    for(int i = 0; i < mapOverlays.size(); i++) 
    { 
     overlay = (ItemizedOverlay)mapOverlays; //I am getting an error here: java.util.Collections$SynchronizedRandomAccessList (from e.getMessage()). The stack trace does not contain any specific exception but only the trace of the error pointing to this line. 
     existingOverlayItem = overlay.getItem(i); 

     if(itemToCompare.getPoint().equals(overlayItem.getPoint()) 
      && itemToCompare.getSnippet().equals(overlayItem.getSnippet()) 
      && itemToCompare.getTitle().equals(overlayItem.getTitle())) 
      return true; //if all data are the same 
    } 

    return false; 
} 
+1

你是如何創建你的類'MapOverlay'是一個List類?它似乎不符合'List '。我也會改變你的循環到foreach。 (Overlay ol:mapOverlays){.....}'。什麼是「itemToCompare」?顯示更多信息以瞭解它。 – 2012-02-10 10:01:14

+0

是的,我創建了MapOverlay。它擴展了ItemizedOverlay。 itemToCompare與existingOverlayItem相同。我已經更新了我的代碼。 – Arci 2012-02-10 10:12:24

+0

好的。所以你已經修復它了。 – 2012-02-10 10:14:54

回答

0

感謝所有回答我的問題。我發現我的問題發生是因爲我將mapOverlays投射到錯誤的類。

此外,而不是從mapOverlays(我不知道如何)中提取OverlayItem,我只是在addOverlay(OverlayItem overlayItem)內進行驗證。我之前無法做到這一點,因爲我總是重新初始化我的itemizedOverlay的價值。因此,我無法將新添加的OverlayItem與舊的OverlayItem進行比較,因爲itemizedOverlay不再保留舊值。我所做的不是總是重新初始化itemizedOverlay,而是總是清除mapOverlays,它等於mapView.getOverlays()。clear()。

0

我不知道MapOverlay,但你也許可以「噸放列表到MapOverlay

0

這代碼看起來有點怪在哪裏到來。如果itemToCompare與overlayItem是同一個類,爲什麼不在類中覆蓋equals並使用它來代替每個參數?

更好的是,在Class中覆蓋equals會授予你可以訪問:

mapOverlays.contains(overlayItem); 

因此,您的整個isExisting方法將被上面的調用所取代。你可以看到更多關於如何工作的信息here