我有一個相對簡單的MapActivity,我試圖在給定的地圖區域內顯示 「陣營」列表。我創建了名爲CampOverlayItem的OverlayItem的一個自定義 子類,名爲CampsOverlay的自定義 返回CampOverlayItems,當然還有一個填充地圖的MapActivity子類 。ItemizedOverlay.getIndexToDraw中的NullPointerException
我從我的活動中創建的 使用AsyncTask從數據庫中提取疊加數據。 AsyncTask由連接到MapView的ViewTreeObserver.OnGlobalLayoutListener觸發。
在的AsyncTask的onPostExecute方法,創建我CampsOverlay類的新實例 並將其傳遞從 數據庫(這是在獲取doInBackground)返回營地的列表。然後我打電話:
mapView.getOverlays().add(newOverlay);
其中newOverlay是我剛創建的CampsOverlay。所有這些代碼 運行沒有錯誤,但在地圖試圖繪製自己,我得到一個 NullPointerException異常與下面的堆棧跟蹤:
java.lang.NullPointerException
at
com.google.android.maps.ItemizedOverlay.getIndexToDraw(ItemizedOverlay.java:
211)
at
com.google.android.maps.ItemizedOverlay.draw(ItemizedOverlay.java:240)
at com.google.android.maps.Overlay.draw(Overlay.java:179)
at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:
42)
at com.google.android.maps.MapView.onDraw(MapView.java:476)
at android.view.View.draw(View.java:6274)
at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.View.draw(View.java:6277)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.View.draw(View.java:6277)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
at android.view.View.draw(View.java:6277)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow
$DecorView.draw(PhoneWindow.java:1883)
at android.view.ViewRoot.draw(ViewRoot.java:1332)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1097)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4203)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
at dalvik.system.NativeStart.main(Native Method)
因爲它似乎特別相關,這裏是我的 ItemizedOverlay代碼子類:
public class CampsOverlay extends ItemizedOverlay<CampOverlayItem> {
private ArrayList<Camp> camps = null;
public CampsOverlay(Drawable defaultMarker, ArrayList<Camp> theCamps)
{
super(defaultMarker);
this.camps = theCamps;
}
@Override
protected CampOverlayItem createItem(int i) {
Camp camp = camps.get(i);
CampOverlayItem item = new CampOverlayItem(camp);
return item;
}
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
return super.onTap(index);
}
@Override
public int size() {
return camps.size();
}
}
有沒有人有任何想法可能發生在這裏?我試圖用 來驗證我控制的所有內容都是非空的。如有必要,我可以 提供更多的代碼。
你完全正確,謝謝Mark。在問這個問題之前,你會認爲我會更加看重你的示例代碼。現在,我只需要弄清楚爲什麼覆蓋項目不會出現;) – lyricsboy 2010-03-31 16:48:26