有similar questions這個,但它可能並不明顯,如果問題在於某人(像我)試圖爲MapView實現onTap事件。問題/問題是這樣的:
您試圖實現自定義ItemizedOverlay在MapView,像這樣:
MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, mContext);
通常情況下,如果你是從一個活動這樣做,這是不夠的使用方法:
MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, this);
這是您可以在各種教程(包括谷歌的HelloItemizedOverlay例子)找到一條線,你可以從他們的一個複製它。但是,如果您嘗試將此代碼移到其他任何其他位置(例如,到AyncTask),那麼this
將不起作用。如果你想(像我一樣)來改變this
到getBaseContext()
或getApplicationContext()
,那麼你會遇到下面的錯誤,當您嘗試在您的MapView上ItemizedOverlay挖掘:
08-23 09:59:21.444: E/AndroidRuntime(30056): FATAL EXCEPTION: main
08-23 09:59:21.444: E/AndroidRuntime(30056): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.ViewRootImpl.setView(ViewRootImpl.java:589)
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.app.Dialog.show(Dialog.java:277)
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
08-23 09:59:21.444: E/AndroidRuntime(30056): at com.myapp.MyCustomItemizedOverlay.onTap(MyCustomItemizedOverlay.java:32)
這是什麼錯誤的原因,你如何解決它?